Что происходит в ответ на обратные вызовы.always() или.then() в jQuery?

Если у вас есть функция, которая имеет оба .then а также .always обратные вызовы, который будет выполняться первым?

1 ответ

Решение

Взято из deferred.resolve()документация:

Когда Deferred разрешен, вызываются любые doneCallbacks, добавленные deferred.then() или deferred.done(). Обратные вызовы выполняются в порядке их добавления.

Пример ниже:

var $logger = $("#logEntry");
function addLog(content){
   $logger.append($("<li/>").html(content));
}

var newPromise = $.Deferred();

$.when(newPromise).done(function() {
    addLog("1st $when().done!");
});

newPromise.then(function() {
    addLog("1st then!");
}).always(function() {
    addLog("1st always!");
}).done(function() {
    addLog("1st done!");
}).done(function() {
    addLog("2nd done!");
}).always(function() {
    addLog("2nd always!");
}).then(function() {
    addLog("2nd then!");
});

$.when(newPromise).done(function() {
    addLog("2nd $when().done!");
});

addLog("Resolving promise!");

newPromise.resolve();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="logEntry"></ul>

Другие вопросы по тегам