我的问题完全取决于以前的question:
关于第3号方法(“计数器”):如果handleCompletion
需要startOtherAsync
的值才能完成工作。我们该如何实现呢?
请注意,来自startOtherAsync
的值(可能是参数)会使startAsync
感到悲伤,无法再调用handleCompletion
。
答案 0 :(得分:2)
这实际上是使用承诺的完美场所。默认情况下,所有jQuery Ajax调用都会返回promises,这意味着您可以将它们链接在一起:
$.ajax({/*snip*/}).then(
function(result){
doSomethingWithResult(result);
return $.ajax({/*snip*/});
}).then(function(result){
doSomeFinalProcessing(result);
});
当然,还有jsFiddle to demonstrate this happening。
这是一个更新的小提琴,展示如何组合多个同时承诺并结合其结果。
http://jsfiddle.net/jwcarroll/U3N9u/
代码:
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
function doStuffLater(msg){
var def = $.Deferred();
setTimeout(function(){
def.resolve(msg);
}, getRandomInt(300, 1000));
return def.promise();
}
function needsBothReturns(one, two){
console.log({one:one, two:two});
}
var first = doStuffLater("Sent First");
var second = doStuffLater("Sent Second");
$.when(first, second).done(function(result1, result2){
needsBothReturns(result1, result2);
});