带参数的两个异步Javascript函数

时间:2014-01-28 02:50:34

标签: javascript jquery asynchronous

我的问题完全取决于以前的question

关于第3号方法(“计数器”):如果handleCompletion需要startOtherAsync才能完成工作。我们该如何实现呢?

请注意,来自startOtherAsync的值(可能是参数)会使startAsync感到悲伤,无法再调用handleCompletion

1 个答案:

答案 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);
});