我正在处理promises,我需要知道异步方法处理的所有项目的结果。所以我认为Promise.all()可以解决我的问题,例如:
const values = await Promise.all(items.map((item) => {
asyncMethodThatLogsAndReturnsBoolean(item);
}));
console.log(values);
我在这里发现的是,在值日志之后会打印一些异步方法的日志。并且values
被打印为undefined
的数组。
该实现没有等到所有promise都解决后才可以使用正确的数据打印值对象的原因吗?
* {asyncMethodThatLogsAndReturnsBoolean(item)
调用了其他异步方法,但是所有调用都具有await
。
答案 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
,不是你想要的。