我正在寻找一种更简洁的方法:
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();
}
});
}
},
答案 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()上的示例。