Cette réponse utilise promises
, une fonctionnalité JavaScript de la ECMAScript 6
norme. Si votre plate-forme cible ne prend pas en charge promises
, polyfill avec PromiseJs .
Les promesses sont une nouvelle (et bien meilleure) façon de gérer les opérations asynchrones en JavaScript:
$('a.button').click(function(){
if (condition == 'true'){
function1(someVariable).then(function() {
function2(someOtherVariable);
});
}
else {
doThis(someVariable);
}
});
function function1(param, callback) {
return new Promise(function (fulfill, reject){
fulfill(result);
reject(error);
});
}
Cela peut sembler une surcharge importante pour cet exemple simple, mais pour un code plus complexe, c'est bien mieux que d'utiliser des rappels. Vous pouvez facilement chaîner plusieurs appels asynchrones à l'aide de plusieurs then
instructions:
function1(someVariable).then(function() {
function2(someOtherVariable);
}).then(function() {
function3();
});
Vous pouvez également encapsuler facilement les reports jQuery (qui sont renvoyés par les $.ajax
appels):
Promise.resolve($.ajax(...params...)).then(function(result) {
});
Comme @charlietfl l'a noté, l' jqXHR
objet renvoyé par $.ajax()
implémente l' Promise
interface. Il n'est donc pas nécessaire de l'envelopper dans un Promise
, il peut être utilisé directement:
$.ajax(...params...).then(function(result) {
});
function1
exécution d' une opération asynchrone?