2013-09-23 5 views
0

У меня есть 3 JS функции:Обратный вызов jQuery, когда закончены 3 метода?

func1() 
{ 
    $.ajax(...,callback1) 
} 


func2() 
{ 
    $.ajax(...,callback2) 
} 


func3() 
{ 
    $.ajax(...,callback3) 
} 

Они выполняются так:

func1(); 
func2(); 
func3(); 

Вопрос, как я могу выполнить mySummaryCallback() после всего 3 являются done?

NB

Я мог бы использовать функцию закрытия обратного вызова, которая увеличивает значение, а затем выполнить. но я не могу коснуться функций обратного вызова ajax. (https://stackoverflow.com/a/2911891/859154)

ответ

3

Использования $.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 
}) 
+0

Ваше редактирование помогло мне .. поэтому 'когда' сигнализирует, когда все они ** разрешены **, а затем они (все результаты) ** отфильтрованы до одного ** обратного вызова done/fail/always .... right? –

+0

@RoyiNamir yes ... 'always' вызывается в любом случае ... вместе с' done' и 'fail' –

+0

Я думаю, что always() будет запущен даже, например, только первый отложенный объект не прошел, не дожидаясь все завершено. Это нужно больше тестового мышления –

0

Если вы не можете редактировать callbackN функции непосредственно, сделать обертку, например:

func2() 
{ 
    $.ajax(..., function() { 
     //call your callback here 
     callback2(); 

     //increase your counter here once it's done ... 
    }); 
} 

Это то, что вы хотели?

2

Возврата обещание интерфейса, выставленный каждый Ajax запрос, из ваших функций и использовать $.when() метод JQuery:

func1() 
{ 
    return $.ajax(...,callback1) 
} 


func2() 
{ 
    return $.ajax(...,callback2) 
} 


func3() 
{ 
    return $.ajax(...,callback3) 
} 

$.when(func1(),func2(),func3()).done(/*callback*/); 
+0

Сигналы 'When' сигнализируют, когда все они« завершены »или« сделаны »? –

+0

когда это сделано (успех), для полного использования всегда() и для ошибки использования fail() –

+0

Да, я знаю, но где он говорит, что 'когда' сигнализирует, когда все это делается? в документах говорится, что он сигнализирует, когда он перераспределяется. –

0

Одним из способов является синхронизируются все Ajax, а затем вам нужно позвонить в BigCallback

В противном случае вам нужно проверить, что такое состояние (0 - для инициированного запроса, до 4) из последнего Ajax, после чего вы можете действовать согласно.

+0

_synchronized все Ajax ....._ Если у вас нет ответа, пожалуйста, не –

Смежные вопросы