Verwendung von setTimeout() in Promise Chains
Bei der Arbeit mit Promises ist es wichtig zu verstehen, wie asynchrone Vorgänge innerhalb einer Promise Chain gehandhabt werden. In dem angegebenen Codeausschnitt besteht die Absicht darin, die Ausführung einer nachfolgenden Anfrage in einer Versprechenskette zu verzögern. Die Verwendung von setTimeout() direkt im .then()-Handler kann jedoch zu Problemen führen.
Warum setTimeout() fehlschlägt
In Ihrem Code ist setTimeout() Wird im .then()-Handler der zweiten Anfrage verwendet. Dieser Ansatz unterbricht jedoch die Versprechenskette, da der zurückgegebene Wert des .then()-Handlers kein Versprechen ist. Der Rückruf setTimeout(), der das Versprechen enthält, das Sie verketten möchten, ist außerhalb seines eigenen Kontexts nicht zugänglich.
Lösung mit der Verzögerungsfunktion
Um die Versprechenkette aufrechtzuerhalten , können Sie eine separate Verzögerungsfunktion erstellen, die ein Versprechen zurückgibt:
<code class="javascript">function delay(t, val) { return new Promise(resolve => setTimeout(resolve, t, val)); }</code>
Verwenden Sie dann die Verzögerungsfunktion in Ihrem Versprechen Kette:
<code class="javascript">return delay(1000).then(function() { return getLinks(globalObj["two"] + ".txt"); });</code>
Dies gibt ein Versprechen vom .then()-Handler zurück, das sicherstellt, dass die Ausführung der nachfolgenden Anfrage verzögert wird.
Alternative mit Promise.prototype. Verzögerung
Eine andere Möglichkeit besteht darin, das Promise-Objekt mit einer Verzögerung zu erweitern Methode:
<code class="javascript">Promise.prototype.delay = function(t) { return this.then(function(val) { return delay(t, val); }); }</code>
Mit dieser Methode können Sie .delay() direkt für Ihre Versprechen aufrufen:
<code class="javascript">Promise.resolve("hello").delay(500).then(function(val) { console.log(val); });</code>
Beide Ansätze stellen sicher, dass die Versprechenskette und die nachfolgende Anfrage korrekt eingehalten werden wird nach der angegebenen Verzögerung ausgeführt.
Das obige ist der detaillierte Inhalt vonWie integriere ich setTimeout() richtig in Promise Chains?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!