For such things like loops, filters, groups I use alot library - it designed for lazy iterations over arrays, but also supports Promise handlers. The first example would look like this: const names = ['saviomartin', 'victoria-lo']; const users = await alot(names) .mapAsync(async name => { let { data: user } = await axios.get(`https://api.github.com/users/${name}`); return user; }) .toArrayAsync({ threads: 4 })