Javascript方法链接

不知道如何把这个。

假设我有一个JavaScript方法可以实现一些AJAX调用:

function makeAJAXCalls()
{
    // who knows how long this will take
}

我不希望下一个函数在所有的AJAX调用完成之前执行。 我也不想将下一个函数调用放入AJAX调用的成功回调函数中。

有没有一种方法可以将这些链接起来,所以直到makeAJAXCalls()完成它需要做的所有事情之后,下一个函数才会被调用?


var queueCount =0;
function makeAjaxCalls()
{
    queueCount+=7; // or however many calls you need to make.
    // make your ajax calls. onSuccess (or failure), call checkQueue();
}
function checkQueue()
{
    queueCount--;
    if (queueCount <=0)
    {
       doNext();
    }
}

这使得调用异步,这可能是这里的意图。


你可以使用jQuery的$.when()功能。

$.when(makeAjaxCalls()).done(function () { 
   // Do other things here 
});

如果您希望首先完成所有这些功能,您甚至可以将多项功能添加到该功能。 这些都被称为延期对象。


你真的限制你的选择。 AJAX本质上是异步的(除非你使用同步的xhrs,因为它们冻结了浏览器,所以你不需要)。 所以你唯一的选择就是在回调中处理它,因为回调是你知道请求已完成的唯一方式,以及请求数据完成后通过的位置。

因为您有多个回调函数,并且您希望等待所有回调函数完成,您可以在所有回调函数中使用相同的函数调用,并且该函数可以跟踪哪些回复已返回,并且只有在所有回复都存在的情况下才会继续。

所以你可以做类似的事情

var resultsHolder = [];
var syncer = function(response){
    // add results to resultsHolder on call

    if (resultsHolder.lengh === numberExpected) {
     //proceed
    }
}

然后在你的makeAllRequests方法中使用syncer

链接地址: http://www.djcxy.com/p/55305.html

上一篇: Javascript method chaining

下一篇: Simulating context switches in JavaScript?