2017-07-15 22 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