序列化ajax调用而不会因故障而中断

时间:2016-07-08 10:18:19

标签: javascript jquery promise

我需要按顺序执行ajax调用列表。换一种说法, 一个接一个地完成。

我通过链接jQuery promise来实现这一点。我需要执行的调用,无论前者是否成功。所以我将jquery返回的promise包装成一个新的。有用。但我想知道诺言是否可以直接支持这种情况而不使用包装。

function getOne(apple) {
    return $.get(apple)
    .done(function() {
        console.info("I'm done " + apple);
    })
    .fail(function() {
        console.info("I fail " + apple);
    });
};

function getAll(apples) {
    return _.reduce(apples, function(result, apple) {
        return result.then(function() {
            var d = $.Deferred();
            getOne(apple).always(function() {
                d.resolve();
            });
            return d.promise();
        })
    }, $.when(1));
};

1 个答案:

答案 0 :(得分:0)

我希望这个伪代码有帮助:

var sequence = Promise.resolve();
for(loop){
   sequence = sequence.then(function(url){ 
      return ajaxGet(url);
   }).catch(function(err){
      console.log(err);
   })
}

这个想法是你一个接一个地链接承诺,而下一个承诺只在以前解决或拒绝时开始。