DEV Community

Discussion on: Async function behaves differently in loop [SOLVED]

Collapse
 
rocktimsaikia profile image
Rocktim Saikia

That makes sense and works just fine. Thanks 🎉 but is there anyway to do it with map.

Collapse
 
bharath_bheemireddy profile image
Bharath_Bheemireddy

If you want to use with map, you have to wrap with Promise.all()



formatData= async () => {
  const users = ["rocktimsaikia", "aholachek", "benawad"];
  const result = Promise.all(users.map(async (user) => ({
      name: user,
      followers: await getFollowers(user)
   })));
  return result;
};
Thread Thread
 
brnkrygs profile image
Brian Krygsman

(and you might want to await that Promise.all())

Thread Thread
 
bharath_bheemireddy profile image
Bharath_Bheemireddy • Edited

Promise.all() waits for all fulfillments (or the first rejection).
developer.mozilla.org/en-US/docs/W...

Thread Thread
 
brnkrygs profile image
Brian Krygsman

You're exactly right... and it does so by returning a Promise itself.

Since it returns a Promise, it's await-able in the context of an async function like the code here.

Depends on the expectations of the calling code of course, but if the calling code is expecting the value as opposed to the Promise, it might be worth considering an await

e.g.

//...
const result = await Promise.all(users.map(async (user) => ({
//...