循环中的承诺

时间:2015-02-18 08:46:44

标签: angularjs

我在Angular JS中遇到以下问题。我有这个循环:

angular.forEach(objects, function(object)
{
    UpdateFactory.updateObjectInDatabase(version, object).then(function(newVersion)
    {
    version = newVersion;
        alert("Update successful! Version number increased.);
    });
});

但我的问题是: 如果之前的调用完成,我只想调用Factory方法。否则我得到状态码409,因为版本错误。

如果有人能帮助我,我会很高兴的!

最好的问候。

2 个答案:

答案 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结束时调用函数,进行递归调用并在键结束时停止