Javascript 在完成循环之前,承诺得到解决
我正在使用一个循环将数据更新到服务器,一旦收到服务器的响应,它就会在我的本地数据库中更新。但是在本地数据库中完成所有更新之前,承诺得到解决,并且只有一个数据得到更新。有谁能告诉我,为什么在完成for循环中的所有过程之前,承诺会得到解决Javascript 在完成循环之前,承诺得到解决,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,我正在使用一个循环将数据更新到服务器,一旦收到服务器的响应,它就会在我的本地数据库中更新。但是在本地数据库中完成所有更新之前,承诺得到解决,并且只有一个数据得到更新。有谁能告诉我,为什么在完成for循环中的所有过程之前,承诺会得到解决 function updatecategories (data, categoryname) { var defer = $q.defer(); var proms = []; var prom; $log.log('Change in daybo
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;
}
函数更新类别(数据、类别名称){
var defer=$q.defer();
var-proms=[];
var-prom;
$log.log('daybook中的更改被调用',数据);
$log.log('daybook中的更改被调用',categoryname);
对于(变量i=0;i
首先,请添加控制台日志(proms.length)代码>在这一行之前:$q.all(proms)。然后(function(){
我猜它将打印0,因为第一次将任何内容推送到proms
数组时,都将异步进行,这意味着解释器将在完成updatecategories
函数运行之后
如果确实如此,考虑把它变成类似的东西:
proms.push(save(data[i]).then(function (result) {
$log.log('values changed in daybook', result);
}, function (err) {
$log.log('error in update to daybook', err);
}));
然后,当您点击$q.all(proms)时
line,proms
将是一个充满未解决承诺的数组,其中$q.all
将等待所有承诺得到解决,然后defer.promise
也将得到解决。for循环也将首先完成。然后i是data.length,可能只有最后一个承诺得到解决。如下图所示,您希望h承诺本身而不是承诺结果。为什么要等待proms
完成?其中没有应该解决的问题,而且您是异步填充的,您应该将其中的save语句推送到它以等待初始proms。长度为0,所以我像上面提到的那样更改了代码当时我可以看到proms.length为11,但只有一个数据得到更新,然后承诺就结束了。