У меня есть 3 функции JS:
func1 ()
{
$.ajax(...,callback1)
}
func2 ()
{
$.ajax(...,callback2)
}
func3 ()
{
$.ajax(...,callback3)
}
Они выполняются следующим образом:
func1();
func2();
func3();
Вопрос: Как я могу выполнить mySummaryCallback()
после того, как все 3 done
?
NB
Я мог бы использовать функцию обратного вызова закрытия, которая увеличивает значение, а затем выполняет. но я не могу коснуться функций обратного вызова ajax. (qaru.site/questions/364239/...)
Используйте $.when(), чтобы сделать это для всех ваших методов, чтобы вернуть объект обещания обратно вызывающему абоненту
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
})
Интерфейс возвращаемого обещания, отображаемый каждым запросом ajax, из ваших функций и использования метода $.when()
jquery:
func1 ()
{
return $.ajax(...,callback1)
}
func2 ()
{
return $.ajax(...,callback2)
}
func3 ()
{
return $.ajax(...,callback3)
}
$.when(func1(),func2(),func3()).done(/*callback*/);
When
сигналы , когда все они complete
или done
?
Я думаю, что вы можете использовать jQuery Deferred в этой ситуации
Если вы не можете редактировать функции callbackN
напрямую, создайте оболочку, например:
func2 ()
{
$.ajax(..., function() {
//call your callback here
callback2();
//increase your counter here once it done ...
});
}
Это то, что вы хотели?
Один из способов - синхронизировать все вызовы Ajax, а затем вам нужно позвонить в BigCallback
В противном случае вам нужно проверить, что такое состояние (0- для инициированного запроса, до 4) последнего Ajax, после чего вы можете действовать согласно.
when
сигналы, когда они все разрешены, а затем они (все результаты) отфильтрованы к одному обратному вызову сделано / сбой / всегда .... правильно?always
вызывается в любом случае ... вместе сdone
иfail