2017-07-15 54 views
0

所以我得到这个其它附加承诺参数的JavaScript

for(var i =0;i<result.length;i++){ 
    User.find(result[i].user).then((err,user)=>{ 
     resultArray.push({name : result[i].name, userName : user.name});  
    } 
} 

但由于循环结束的承诺结算前,这是行不通的。 所以我想知道如果我可以给我的副本User.find()回调? 我不知道任何方法来保持结果和用户数组之间的数据同步,因为我不知道承诺将以何种顺序解决。

+0

'result.forEach(RES => User.find(res.user)。然后(。 ..' – Will

+0

好吧,但是,我怎么知道每个请求已经完成? –

+0

@KillianAllegrain你可能想要考虑使用诸如[async]之类的东西(https://github.com/caolan/async)或Promise.all – aug

回答

0

在评论部分提到,您想解决所有用户。可以使用阵列的方法map生成承诺的数组,以然后传递到Promise.all,像这样:

Promise.all(
    result.map(res => User.find(...)) 
) 
    .then(result => { 
    // all resolved users are in result 
    }); 
+0

非常完美!爱你 –

+0

不客气。随时接受我的回答:) – lumio