【问题标题】:jQuery callback when 3 methods are finished?3个方法完成时的jQuery回调?
【发布时间】:2013-09-23 11:04:08
【问题描述】:

我有 3 个 JS 函数:

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


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


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

它们是这样执行的:

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

问题我如何执行mySummaryCallback(),毕竟 3 是done

注意

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

【问题讨论】:

    标签: jquery


    【解决方案1】:

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

    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
    })
    

    【讨论】:

    • 您的编辑帮助了我..所以when 发出信号,当它们全部解决然后它们(所有结果)过滤到一个回调完成/失败/总是....对吗?
    • @RoyiNamir 是的...在任何一种情况下都会调用always...以及donefail
    • 我猜 always() 甚至会被触发,例如,只有第一个延迟对象失败,而不是等待所有完成。这需要更多的测试思路
    【解决方案2】:

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

    func1 ()
    {
        return $.ajax(...,callback1)
    }
    
    
    func2 ()
    {
        return $.ajax(...,callback2)
    }
    
    
    func3 ()
    {
        return $.ajax(...,callback3)
    }
    
    $.when(func1(),func2(),func3()).done(/*callback*/);
    

    【讨论】:

    • When 全部为completedone 时是否发出信号?
    • 完成时(成功),完全使用 always(),错误使用 fail()
    • 是的,我知道,但它在哪里说 when 表示他们都完成了?文档说它在重新爱时发出信号。
    • 所有延迟对象都触发成功回调时触发。
    • 所以我的第一条评论不正确。我问:什么时候 when 函数发出信号。
    【解决方案3】:

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

    func2 ()
    {
        $.ajax(..., function() {
            //call your callback here
            callback2();
    
            //increase your counter here once it's done ...
        });
    }
    

    这是你想要的吗?

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-26
          • 1970-01-01
          • 2017-08-08
          相关资源
          最近更新 更多