async await promise.all map not resolving promises

余生颓废 提交于 2020-06-01 06:22:34

问题


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


回答1:


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)
})();



回答2:


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();



回答3:


Like other answers have mentioned, async returns a promise. Thats the reason you are getting

 Promise { <pending> } 

Irrespective of whether what you are doing makes sense, you could just use then on this promise that was returned like so

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

results().then(e => console.log(e));


来源:https://stackoverflow.com/questions/56103297/async-await-promise-all-map-not-resolving-promises

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!