I have very basic async function going on here. my primary function "formatData"
is formatting some data from an array "users"
. which are basically some github usernames.
This function formats the data in this way :
[
{ name: 'rocktimsaikia', followers: 12 },
{ name: 'aholachek', followers: 90 },
{ name: 'benawad', followers: 30 }
]
Very basic . But the issue is to get the followers count
i created another async
function "getFollowers"
which extracts the followers count with given argument which is the github user name
that i am providing in formatData
.
Here is my code :
const getFollowers = async name => {
const data = await fetch(`https://api.github.com/users/${name}`);
const { followers } = await data.json();
return followers;
};
const formatData= async () => {
const users = ["rocktimsaikia", "aholachek", "benawad"];
const result = await users.map(async (user) => ({
name: user,
followers: await getFollowers(user)
}));
return result;
};
But the function formatData()
returns everything with a promise. What am i missing here ? please help !
Top comments (6)
Try this one.
That makes sense and works just fine. Thanks 🎉 but is there anyway to do it with
map
.If you want to use with map, you have to wrap with
Promise.all()
(and you might want to
await
thatPromise.all()
)Promise.all()
waits for all fulfillments (or the first rejection).developer.mozilla.org/en-US/docs/W...
You're exactly right... and it does so by returning a
Promise
itself.Since it returns a
Promise
, it'sawait
-able in the context of anasync
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 anawait
e.g.