$ .when和回调

时间:2013-03-10 22:23:00

标签: javascript jquery

我正在寻找一种更简洁的方法:

    var f1 = function(){};
    var f2 = function(){};
    doSomething('ArbritraryString',f1); //does xhr, and then runs f1 on callback
    doSomething('ArbritraryString',f2); //does xhr, and then runs f2 on callback

    $.when($.get('myJson',f1,f2)).then(function(ret1, ret2, ret3){

        //doStuff
    });

有什么想法吗?

doSomething函数字面上只调用空的f1 / f2函数,所以我有一个$.when atm的回调处理程序....

理想情况下我想要

$.when($.get('myJson',doSomething('ArbritraryString',function(){}); ,doSomething('ArbritraryString',function(){}))).then(function(ret1, ret2, ret3){

    //doStuff
});

让jquery神奇地知道doSomething中的第二个参数是它必须要注意的回调。

doSomething看起来像这样:

doSomething:function(name,callbackFunction){
    /*snip logic 

    */
    $.get(name, function(data){
            /*some more logic 


            */

            if(typeof(callbackFunction)==='function'){
                callbackFunction();
            }
        });
    }
},

1 个答案:

答案 0 :(得分:2)

更改doSomething以便它不接受回调并只返回jqXHR对象(以return $.get结尾),然后您可以正确使用$.when来跟踪所有jqXHR的进度对象:

$.when(
        doSomething('ArbritraryString'),
        doSomething('ArbritraryString'),
        $.get('myJson')
    ).done(function(ret1, ret2, ret3){
        // all three succeeded
    });

如果doSomething需要进行某种额外处理才能被视为已解决,那么此函数应创建自己的Deferred对象并返回该对象的值{{ 1}}而不是直接返回.promise()。有关此方法的更多信息,请参阅deferred.promise()上的示例。