Maison > Article > interface Web > Pourquoi l'utilisation de « setTimeout » dans une chaîne de promesses provoque-t-elle une erreur d'analyse JSON ?
Pour tenter d'explorer les promesses, vous avez tenté de récupérer un ensemble de liens à l'aide d'une requête initiale et de récupérer le contenu du premier lien à l’aide d’une requête ultérieure. Pour introduire un délai avant de renvoyer le prochain objet de promesse, vous avez utilisé setTimeout. Cependant, cette approche rencontre une erreur d'analyse JSON qui disparaît lorsque setTimeout() est éliminé.
Pour élucider cette erreur, il est crucial de comprendre que pour maintenir la continuité de la chaîne de promesses, vous ne pouvez pas utiliser setTimeout() comme tu l'as fait. La raison en est que vous ne renvoyez pas de promesse du gestionnaire .then(), mais plutôt du rappel setTimeout(), ce qui rend vos efforts inefficaces.
Envisagez plutôt d'implémenter une simple fonction de retard :
<code class="js">function delay(t, val) { return new Promise(resolve => setTimeout(resolve, t, val)); }</code>
Avec cette fonction de délai en place, vous pouvez modifier votre code comme suit :
<code class="js">getLinks('links.txt').then(function(links){ let all_links = (JSON.parse(links)); globalObj=all_links; return getLinks(globalObj["one"]+".txt"); }).then(function(topic){ writeToBody(topic); // return a promise here that will be chained to prior promise return delay(1000).then(function() { return getLinks(globalObj["two"]+".txt"); }); });</code>
Cette modification garantit que vous renvoyez une promesse du gestionnaire .then(), l'enchaînant ainsi de manière appropriée.
Vous pouvez également étendre l'objet Promise avec une méthode de retard, vous permettant d'utiliser une syntaxe plus concise :
<code class="js">Promise.prototype.delay = function(t) { return this.then(function(val) { return delay(t, val); }); } Promise.resolve("hello").delay(500).then(function(val) { console.log(val); });</code>
En incorporant ces modifications, vous pouvez en toute transparence introduisez des retards dans votre chaîne de promesses, atténuant ainsi l'erreur d'analyse JSON rencontrée.
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!