$ .when():如何使用它?

时间:2013-06-07 14:10:05

标签: javascript jquery asynchronous

我有这样的事情:

fun1: function (){
    var jqXHR = $.get(
            "http://url.com",
             "search=toto",
            function(){});

    jqXHR.fail(function (jqXHR, textStatus, errorThrown){
       //do something
    });

    jqXHR.done(function (data,textStatus,jqXHR){
        //do something
    });
}

fun2: function (){
    fun1();
    //do something AFTER my AJAX requests are finished
}

我想等待我的AJAX请求在继续之前完成。为实现这一点,我通常会在fun1()中使用回调函数。但我的代码现在包含几个级别的回调,它看起来很混乱。然后,我想使用$.when方法,但我不知道如何做到这一点:因为fun1不是延迟对象,我不能只写:

$.when(fun1()).then(//do something);

2 个答案:

答案 0 :(得分:5)

当您等待多个承诺时,

$.when非常有用。在你的情况下,你似乎不需要它。

在这里,你只需要从函数中返回jqXHR对象:

fun1: function (foo){
    // ...
    return jqXHR;
}

fun2: function() {
    fun1().then(function() {
        // ...
    });
}

$.get返回的对象实现了promise接口,因此您可以直接将回调附加到它。该文档还提供了几个示例:http://api.jquery.com/jQuery.get/

答案 1 :(得分:3)

您需要从promise()返回Deferred对象(或者更好,fun1())。

否则,您无法知道何时完成。

一旦你这样做,你就不需要$.when();相反,您只需拨打fun1().then(...)

即可