Maison  >  Article  >  interface Web  >  Comment intégrer correctement setTimeout() dans les chaînes de promesses ?

Comment intégrer correctement setTimeout() dans les chaînes de promesses ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 16:02:02605parcourir

How to Properly Incorporate setTimeout() into Promise Chains?

Utilisation de setTimeout() dans les chaînes de promesses

Lorsque vous travaillez avec des promesses, il est essentiel de comprendre comment gérer les opérations asynchrones au sein d'une chaîne de promesses. Dans l'extrait de code donné, l'intention est de retarder l'exécution d'une requête ultérieure dans une chaîne de promesses. Cependant, utiliser setTimeout() directement dans le gestionnaire .then() peut entraîner des problèmes.

Pourquoi setTimeout() échoue

Dans votre code, setTimeout() est utilisé dans le gestionnaire .then() de la deuxième requête. Cependant, cette approche rompt la chaîne de promesse car la valeur renvoyée par le gestionnaire .then() n'est pas une promesse. Le rappel setTimeout(), qui contient la promesse que vous souhaitez enchaîner, n'est pas accessible en dehors de son propre contexte.

Solution Utilisation de la fonction delay

Pour maintenir la chaîne de promesse , vous pouvez créer une fonction de délai distincte qui renvoie une promesse :

<code class="javascript">function delay(t, val) {
    return new Promise(resolve => setTimeout(resolve, t, val));
}</code>

Ensuite, utilisez la fonction de délai dans votre chaîne de promesse :

<code class="javascript">return delay(1000).then(function() {
    return getLinks(globalObj["two"] + ".txt");
});</code>

Cela renvoie une promesse du .then (), qui garantit que l'exécution de la requête suivante est retardée.

Alternative en utilisant Promise.prototype.delay

Une autre option consiste à étendre l'objet Promise avec une méthode de delay :

<code class="javascript">Promise.prototype.delay = function(t) {
    return this.then(function(val) {
        return delay(t, val);
    });
}</code>

Avec cette méthode, vous pouvez appeler directement .delay() sur vos promesses :

<code class="javascript">Promise.resolve("hello").delay(500).then(function(val) {
    console.log(val);
});</code>

Les deux approches garantissent que la chaîne de promesses est correctement maintenue et que la la demande ultérieure est exécutée après le délai spécifié.

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!

Déclaration:
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