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

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

Susan Sarandon
Libérer: 2024-10-31 16:02:02
original
605 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

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