1

我正在寻找一种更简洁的方法来做到这一点:

    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 函数,所以我有一个$.whenatm 的回调处理程序......

理想情况下我想要

$.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();
            }
        });
    }
},
4

1 回答 1

2

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

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

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

于 2013-03-10T22:51:15.160 回答