我最近开始使用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