0

我有 3 个 JS 函数:

func1 ()
{
    $.ajax(...,callback1)
}


func2 ()
{
    $.ajax(...,callback2)
}


func3 ()
{
    $.ajax(...,callback3)
}

它们的执行方式如下:

func1();
func2();
func3();

mySummaryCallback()问题在所有 3 之后我该如何执行done

注意

我可以使用一个闭包回调函数来增加一个值然后执行。但我无法触摸 ajax 回调函数。(https://stackoverflow.com/a/2911891/859154

4

5 回答 5

3

使用$.when()为所有需要将承诺对象返回给调用者的方法执行此操作

func1() {
    return $.ajax(..., callback1)
}


func2() {
    return $.ajax(..., callback2)
}


func3() {
    return $.ajax(..., callback3)
}

$.when(func1(), func2(), func3()).done(function () {
    //all are success
}).fail(function(){
    //atleast one failed
}).always(function(){
    //all are completed
})
于 2013-09-23T11:10:02.977 回答
2

从您的函数中返回由每个 ajax 请求公开的 promise 接口并使用$.when()jquery 方法:

func1 ()
{
    return $.ajax(...,callback1)
}


func2 ()
{
    return $.ajax(...,callback2)
}


func3 ()
{
    return $.ajax(...,callback3)
}

$.when(func1(),func2(),func3()).done(/*callback*/);
于 2013-09-23T11:10:16.373 回答
0

如果您不能callbackN直接编辑函数,请制作一个包装器,例如:

func2 ()
{
    $.ajax(..., function() {
        //call your callback here
        callback2();

        //increase your counter here once it's done ...
    });
}

那是你想要的吗?

于 2013-09-23T11:09:26.607 回答
0

我认为你可以在这种情况下使用jQuery Deferred

于 2013-09-23T11:10:00.617 回答
0

一种方法是同步所有 Ajax 调用,然后您需要调用 BigCallback

否则,您需要检查最后一个 Ajax 的状态(0- 表示发起的请求,到 4),然后您可以继续进行。

于 2013-09-23T11:10:16.943 回答