我在Angular JS中遇到以下问题。我有这个循环:
angular.forEach(objects, function(object)
{
UpdateFactory.updateObjectInDatabase(version, object).then(function(newVersion)
{
version = newVersion;
alert("Update successful! Version number increased.);
});
});
但我的问题是: 如果之前的调用完成,我只想调用Factory方法。否则我得到状态码409,因为版本错误。
如果有人能帮助我,我会很高兴的!
最好的问候。
答案 0 :(得分:1)
您可以使用在先前请求完成时调用自身的递归函数来解决此问题:
function update(objects, current) {
UpdateFactory.updateObjectInDatabase(version, objects[current]).then(function (newVersion) {
version = newVersion;
if (objects[++current]) {
update(objects, current);
}
});
}
// Start with first object
update(objects, 0);
注意:这假设对象是一个对象数组
答案 1 :(得分:0)
试试这个
var keys = Object.keys(objects)
var i = 0;
update(function() {
console.log("should be called when the operation end");
})
function update(cb) {
cb = (angular.isFunction(cb) ? cb : angular.noop);
if(i <= keys.length-1 ) {
i++; //increment the counter
UpdateFactory.updateObjectInDatabase(version, objects[keys[i]])
.then(function(newVersion) {
version = newVersion;
alert("Update successful! Version number increased.");
update(cb)
}, function(){
console.log("a promise return a reject");
cb();
});
} else {
cb() //Finish the operation
}
}
只有获取对象的键并在promise结束时调用函数,进行递归调用并在键结束时停止