Heim  >  Artikel  >  Web-Frontend  >  Wie integriere ich setTimeout() richtig in Promise Chains?

Wie integriere ich setTimeout() richtig in Promise Chains?

Susan Sarandon
Susan SarandonOriginal
2024-10-31 16:02:02535Durchsuche

How to Properly Incorporate setTimeout() into Promise Chains?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn