i'm trying to understand Promise.all in a map function using async await but i seem to returning promises which are pending, i don't understand why

Here is the working code when i have a .then to resolve my promise

const arr = [1, 2, 3, 4, 5];

const results = Promise.all(arr.map( item => {
    return item + 1;
}));

results.then(result=> console.log(result))

which logs as expected = [ 2, 3, 4, 5, 6 ]

now to implement the function using async-await i know i need to wrap the function in an async function with the keyword async and await for promise.all

const results = async () => await Promise.all(arr.map(async (item) => {
    return item + 1;
}));


console.log(results())

but i always seem to log Promise { <pending> } I don't understand what im doing wrong

2 Answers

2
Bergi On

Using asnyc/await doesn't make the results function synchronous. (It's literally tagged as async!) So it returns a promise, and you have to await that before logging the values:

const arr = [1, 2, 3];

const results = Promise.all(
  arr.map(async item => item + 1)
);

(async () => {
  console.log(await results)
})();

1
Murtaza Hussain On

What you are doing is assigning an async function to results, thats not how await for the asynchronous function works. You need to assign a promise to results and to avoid then callback chaining we can use async/await to get the response.

const arr = [1, 2, 3];
const results = Promise.all(arr.map(async (item) => {
    return item + 1;
}));

async function output () { 
  console.log(await results);
}

output();