2015-04-23 1 views
1

Si vous avez une fonction qui a à la fois les callbacks .then et .always, laquelle sera exécutée en premier?Que sont les rappels .always() ou .then() dans jQuery?

+3

Pourquoi vous essayez tout simplement pas et voir, je devine alors '()' – adeneo

+0

Et je viens de faire, a pris une minutes , et j'avais raison -> ** http: //jsfiddle.net/adeneo/ou1sy6uw/** – adeneo

+1

Cependant, en les échangeant, ils reviennent différemment -> ** http: //jsfiddle.net/adeneo/ou1sy6uw/1/ **, donc quel que soit l'ordre dans lequel ils sont ajoutés – adeneo

Répondre

5

provenir de la documentation deferred.resolve():

Lorsque le différé est résolu, tout doneCallbacks ajouté par deferred.then() ou deferred.done() sont appelés. Les rappels sont exécutés dans l'ordre dans lequel ils ont été ajoutés.

Exemple ci-dessous:

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>

+1

Dans votre exemple 'always' est attaché à' then', ce qui est un peu différent de ce que OP a demandé. – zerkms