我有3个JS函数:
func1 ()
{
$.ajax(...,callback1)
}
func2 ()
{
$.ajax(...,callback2)
}
func3 ()
{
$.ajax(...,callback3)
}
它们的执行方式如下:
func1();
func2();
func3();
问题如何在所有3个mySummaryCallback()
之后执行done
?
NB
我可以使用一个闭包回调函数来增加一个值然后执行。但是我无法触及ajax回调函数。 (https://stackoverflow.com/a/2911891/859154)
答案 0 :(得分:3)
使用$.when()为所有需要将promise对象返回给调用者的方法执行此操作
func1() {
return $.ajax(..., callback1)
}
func2() {
return $.ajax(..., callback2)
}
func3() {
return $.ajax(..., callback3)
}
$.when(func1(), func2(), func3()).done(function () {
//all are success
}).fail(function(){
//atleast one failed
}).always(function(){
//all are completed
})
答案 1 :(得分:2)
从函数中返回每个ajax请求公开的promise接口,并使用$.when()
jquery方法:
func1 ()
{
return $.ajax(...,callback1)
}
func2 ()
{
return $.ajax(...,callback2)
}
func3 ()
{
return $.ajax(...,callback3)
}
$.when(func1(),func2(),func3()).done(/*callback*/);
答案 2 :(得分:0)
如果您无法直接编辑callbackN
函数,请创建一个包装器,例如:
func2 ()
{
$.ajax(..., function() {
//call your callback here
callback2();
//increase your counter here once it's done ...
});
}
这就是你想要的吗?
答案 3 :(得分:0)
我认为您可以在这种情况下使用jQuery Deferred
答案 4 :(得分:0)
一种方法是同步所有Ajax调用,然后你需要调用你的BigCallback
否则你需要检查最后一个Ajax的状态(0-用于发起请求,到4)然后你可以继续。