Функция jquery $.when не работает должным образом

Я пытаюсь использовать функцию jquery $.when(), чтобы предотвратить запуск определенных функций до завершения ajax. У меня есть функция ниже, но отложенные функции все еще запускаются одновременно с вызовом ajax.

код:

 $.when(cdeckDataStore("param1","param2","param3")).done([function1("param1"),function2("param1")]);


function cdeckDataStore(action,step,checked) {
   return $.ajax({
      type: "POST",
      datatype: "json",
      url: "url/to/api",
      data: {"action":action,"step":step,"data": checked},
      success: function(data) {
        console.log("success");
      }
   });

}

согласно документам function1 и function2 следует подождать, пока ajax не вернется в огонь.

я что-то упускаю?


person arrowill12    schedule 06.08.2014    source источник
comment
Вы уверены, что обработчик ошибок не вызывается?   -  person FlavorScape    schedule 07.08.2014
comment
Я вижу успех в консоли.   -  person arrowill12    schedule 07.08.2014
comment
Дублируется из stackoverflow. com/questions/21974649/ - Вам не нужно передавать успех/ошибку. $.ajax() — это обещание. Но успех/ошибка не обещания.   -  person RaphaelDDL    schedule 07.08.2014
comment
Вы правы, сбой все равно вызовет обещание. Мне сошло с рук игнорирование jquery в течение многих лет, пока я не использовал angular, который использует jquery под капотом.   -  person FlavorScape    schedule 07.08.2014
comment
Вы вызываете функции в массиве и возвращаете все, что эти две функции возвращают в массив, переданный для выполнения. Что вам нужно, так это анонимная функция, которая обертывает две функции.   -  person adeneo    schedule 07.08.2014


Ответы (1)


Нет, согласно документам, ссылки, переданные .done(), будут вызываться после выполнения $.when().

В то время как вы вызываете свои функции на месте function1("param1")

Вы можете передать ссылку на функцию, используя что-то вроде:

function1.bind(this, 'param1')
person zerkms    schedule 06.08.2014
comment
спасибо, а как насчет этого. api.jquery.com/deferred.done/ A функция или массив функций, которые вызываются при разрешении Deferred. Я передаю массив функций. - person arrowill12; 07.08.2014
comment
@ arrowill12: нет, вы передаете массив возвращаемых функций. Перейдите к примерам и сравните done( [ fn1, fn2 ], fn3, [ fn2, fn1 ] ) со своим кодом. Видите ли, они передают только имена функций (ссылки), но не вызывают их как fn1() - person zerkms; 07.08.2014