我需要按顺序执行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));
};
答案 0 :(得分:0)
我希望这个伪代码有帮助:
var sequence = Promise.resolve();
for(loop){
sequence = sequence.then(function(url){
return ajaxGet(url);
}).catch(function(err){
console.log(err);
})
}
这个想法是你一个接一个地链接承诺,而下一个承诺只在以前解决或拒绝时开始。