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

lit*_*ude 1 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
}
Run Code Online (Sandbox Code Playgroud)

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

$.when(fun1()).then(//do something);
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 5

$.when当你等待多个承诺时,它们非常有用.在您的情况下,您似乎不需要它.

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

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

fun2: function() {
    fun1().then(function() {
        // ...
    });
}
Run Code Online (Sandbox Code Playgroud)

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