【发布时间】:2018-03-22 18:04:08
【问题描述】:
我正在使用循环将数据更新到服务器,一旦收到来自服务器的响应,它就会在我的本地数据库中更新。但是在完成本地数据库中的所有更新之前,承诺得到解决,只有一个数据得到更新.谁能告诉我为什么在 for 循环中完成所有过程之前承诺得到解决?
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;
}
【问题讨论】:
-
for 循环将首先完成。到那时 i 是 data.length 并且可能只有最后一个承诺得到解决。因此如下所示,您希望将 Promise 本身推送到数组而不是 Promise 结果。
-
您为什么要等待
proms完成?里面没有什么可以解决的,你正在异步填充它,你应该把保存语句推到里面等待
标签: javascript angularjs ionic-framework