Maison > interface Web > js tutoriel > le corps du texte

Comment chaîner plusieurs appels asynchrones à l'aide des promesses jQuery ?

DDD
Libérer: 2024-10-28 12:58:02
original
505 Les gens l'ont consulté

How to Chain Multiple Asynchronous Calls using jQuery Promises?

Enchaîner trois appels asynchrones avec les promesses jQuery

En programmation asynchrone, il est courant d'effectuer plusieurs appels successifs vers une API ou un serveur. Pour gérer efficacement ces appels, il est souhaitable de les enchaîner, en garantissant que chaque appel est terminé avant que le suivant ne soit exécuté. Avec les promesses de jQuery, ce processus de chaînage peut être réalisé facilement.

Considérez le scénario suivant, dans lequel trois appels HTTP doivent être effectués en séquence et les données doivent être transmises d'un appel à l'autre :

<code class="javascript">function first() {
    ajax();
}

function second() {
    ajax();
}

function third() {
    ajax();
}

function main() {
    first().then(second).then(third);
}</code>
Copier après la connexion

Dans cet exemple, l'intention est de passer un premier appel, d'attendre qu'il se termine, puis de passer un deuxième appel en utilisant le résultat du premier appel, et enfin de passer un troisième appel en utilisant le résultat du deuxième appel. Cependant, ce code ne fonctionnera pas comme prévu. Pour enchaîner correctement ces appels, une bonne utilisation des promesses jQuery est nécessaire.

<code class="javascript">function first() {
    var deferred = $.Deferred();
    $.ajax({
        "success": function(resp) {
            deferred.resolve(resp);
        },
    });
    return deferred.promise();
}

function second(foo) {
    $.ajax({
        "success": function(resp) {
            // do something with the resp
        },
        "error": function(resp) {
            // handle the error
        },
    });
}

first().then(function(foo) {
    second(foo);
});</code>
Copier après la connexion

Ce code fournit une solution partielle, mais le chaînage de trois fonctions n'est toujours pas réalisé. La clé pour enchaîner plusieurs appels réside dans le retour de l'objet jqXHR renvoyé par $.ajax() dans chaque fonction. Ces objets sont compatibles avec Promise et peuvent être chaînés à l'aide de .then()/.done()/.fail()/.always().

<code class="javascript">function first() {
    return $.ajax(...);
}

function second(data, textStatus, jqXHR) {
    return $.ajax(...);
}

function third(data, textStatus, jqXHR) {
    return $.ajax(...);
}

function main() {
    first().then(second).then(third);
}</code>
Copier après la connexion

Dans ce code révisé, l'objet jqXHR renvoyé par chaque appel $.ajax() représente la promesse de la fonction respective. Cela permet aux fonctions d'être enchaînées séquentiellement, la sortie d'une fonction étant transmise en entrée à la suivante.

Les arguments data, textStatus et jqXHR proviennent de l'appel $.ajax() dans la fonction précédente. . Par exemple, first() alimente second() et second() alimente troisième(), en transmettant toutes les données pertinentes.

Pour voir cet enchaînement en action, une démonstration en direct utilisant $.when('foo' ) pour tenir une promesse tenue est fourni ci-dessous.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!