JQuery ajax и обещание цепочки заказов - PullRequest
1 голос
/ 04 февраля 2020

В моей ситуации у меня есть вызов jQuery AJAX и дополнительный then:

var ajax = $.get({ /* params */ }).done(function(request) {
  // success handling. no explicit return, so return undefined
}).fail(function(jqxhr, textStatus, error) {
  // faliure handling. no explicit return, so return undefined
});

if (_needFinalization) {
  ajax.then(function() {
    // finalization handling. no explicit return so return undefined
  });
}

Мне не ясно, как выполнить цепочку обещаний. Я прочитал кое-что о том, что возврат ничего не является плохой практикой, поэтому меня беспокоит мой undefined подход.

Моя цель состояла в том, чтобы сначала выполнить вызов AJAX, выполнить success или fail (как второй шаг) и, необязательно, как последний шаг, выполнить функцию завершения внутри then.

1 Ответ

1 голос
/ 04 февраля 2020

Вы можете использовать метод .always для выполнения функции финализации.

jqXHR.always (function (data | jqXHR, textStatus, jqXHR | errorThrown) {}); (добавлено в jQuery 1.6)

Альтернативная конструкция для опции полного обратного вызова, метод .always () заменяет устаревший метод .complete ().

Вы можете увидеть это работает здесь:

function log(content){
   console.log(content);
}

var newPromise = $.Deferred();

$.when(newPromise).done(function() {
    log("When");
});

newPromise.then(function() {
    log("Then");
}).done(function() {
    log("Done");
}).fail(function() {
    log("Fail");
}).always(function() {
    log("Always");
});
newPromise.resolve();
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>

Обратные вызовы Promise - .done (), .fail (), .always () и .then () - вызываются в том порядке, в каком они зарегистрировано. Таким образом, вы должны зарегистрироваться always() после done() и fail(), чтобы выполнить функцию завершения в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...