Maison > Article > interface Web > Comment intégrer correctement setTimeout() dans les chaînes de promesses ?
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!