我正在使用一个循环来更新数据到服务器,一旦收到来自服务器的响应,它会在我的本地数据库中更新。但在完成本地数据库中的所有更新之前,解决,只有一个数据得到更新。任何人都可以告诉我为什么在完成for循环中的所有进程之前,promise会得到解决吗?完成循环承诺之前得到解决
function updatecategories (data, categoryname) {
var defer = $q.defer();
var proms = [];
var prom;
$log.log('Change in daybook change got called', data);
$log.log('Change in daybook change got called', categoryname);
for (var i = 0; i < data.length; i++) {
delete data[i].is_synced;
data[i].category = categoryname;
save(data[i]).then(function (result) {
$log.log('values changed in daybook', result);
proms.push('success');//only one data is getting synced to server rest is not by nid on 10-10
}, function (err) {
$log.log('error in update to daybook', err);
});
}
$q.all(proms).then(function() {
defer.resolve('success');
});
return defer.promise;
}
另外https://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example –
for循环将首先完成。那时我是data.length,可能只有最后一个承诺得到解决。因此,如下所示,您希望将承诺本身推向数组,而不是承诺结果。 – Shilly
你为什么要等'proms'完成?没有什么应该解决的,而且你填充它是不同步的,你应该在其中推入保存语句来等待 – Icepickle