节点等待Promise.all()完全解决

时间:2018-06-19 17:44:53

标签: node.js promise async-await

我正在处理promises,我需要知道异步方法处理的所有项目的结果。所以我认为Promise.all()可以解决我的问题,例如:

const values = await Promise.all(items.map((item) => {
  asyncMethodThatLogsAndReturnsBoolean(item);
}));

console.log(values);

我在这里发现的是,在值日志之后会打印一些异步方法的日志。并且values被打印为undefined的数组。

该实现没有等到所有promise都解决后才可以使用正确的数据打印值对象的原因吗?

* {asyncMethodThatLogsAndReturnsBoolean(item)调用了其他异步方法,但是所有调用都具有await

1 个答案:

答案 0 :(得分:6)

class UserObject{ constructor(name,id){ this.name=name; this.id=id; } validateInsert(){ return this.name.length>0 && this.id!=0; } } var originalUser=new UserObject("tevemadar",123); console.log("original:",originalUser.name,originalUser.id,originalUser.validateInsert()); var json=JSON.stringify(originalUser); console.log("json:",json); var failUser=JSON.parse(json); try{ console.log("fail:",failUser.name,failUser.id,failUser.validateInsert()); }catch(ex){ console.log("failUser failed:",ex); } var correctUser=JSON.parse(json,function(key,value){ if(typeof value==='object') return Object.assign(new UserObject,value); return value; }); try{ console.log("correctUser",correctUser.name,correctUser.id,correctUser.validateInsert()); }catch(ex){ console.log("correctUser failed:",ex); }中的回调函数需要返回一个Promise。

map

否则,通过不显式返回任何内容,您仅返回const values = await Promise.all(items.map((item) => { return asyncMethodThatLogsAndReturnsBoolean(item); })); ,其中undefined假定映射数组中的元素已成功“解析”为Promise.all,不是你想要的。