异步等待诺言。所有地图都无法解决诺言

时间:2019-05-12 20:40:53

标签: javascript node.js promise async-await

我正在尝试使用async await在map函数中了解Promise.all,但我似乎返回的是未决的Promise,我不明白为什么

这是我有一个.then解决我的诺言时的工作代码

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

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

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

按预期记录的日志= [2,3,4,5,6]

现在要使用async-await来实现该功能,我知道我需要使用关键字async将功能包装在async功能中,并等待promise.all

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


console.log(results())

但我似乎总是登录Promise { <pending> },我不明白自己在做什么错

2 个答案:

答案 0 :(得分:2)

使用asnyc / await不会使results函数同步。 (它的字面标记为async!)因此它返回一个Promise,在记录值之前,您必须await进行此操作:

const arr = [1, 2, 3];

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

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

答案 1 :(得分:1)

您正在做的就是为结果分配一个异步函数,这不是等待异步函数的工作方式。您需要为结果分配一个承诺,并避免import random openfile= open('example.txt', 'r') monthData = openfile.readlines() openfile.close dictionary = {} for line in monthData: rNum = random.randrange(1,11) info = line.split(',') key = info[0], rNum value = info[1:] for i in range(len(value)): value[i] = int(value[i]) dictionary[key] = value print(dictionary) 回调链,我们可以使用then来获得响应。

async/await