我最近開始使用promise,因此,例如,我可以等到在執行下一個函數之前用x個記錄更新數據庫。我發現自己正在計算循環迭代,以便在正確的時間解決承諾。例如:如何避免計數JavaScript Promises中的循環迭代
var updateAccounts = function(accounts) {
var promise = new Promise(function(resolve, reject) {
var counter = 0;
accounts.forEach(function(account) {
db.collection('accounts').update({
name: account.name
}, {
$set: {
balance: account.balance
}
});
counter++
if (counter == accounts.length) {
resolve('accounts updated');
}
});
}
});
return promise;
}
有沒有辦法等到循環沒有計算迭代完成了嗎?這只是一種黑客行爲,但我不確定它是否真的存在問題。
您並未等待更新完成。循環是同步的,更新不是。當循環已經結束時,它們在並行中發生。查看[Promise.all()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all) – Thomas
這是mongodb嗎?貓鼬? – trincot
@Thomas所以你的意思是promise.all,每個更新都是一個承諾? – chuckieDub