Heim >Web-Frontend >js-Tutorial >Welche Entwurfsmuster gibt es für asynchrone Promise-Wiederholungen?

Welche Entwurfsmuster gibt es für asynchrone Promise-Wiederholungen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-22 18:53:03351Durchsuche

Which Design Patterns Exist for Asynchronous Promise Retries?

Entwerfen von Mustern für Versprechenswiederholungen

Bei der asynchronen Programmierung ist es oft nützlich, fehlgeschlagene Versprechen erneut zu versuchen, bis sie gelöst sind. Hier sind drei Designmuster, um dies mit Promises zu erreichen:

1. Wiederholen, bis das Versprechen aufgelöst wird (mit Verzögerung und max. Wiederholungen)

Mit diesem Muster können Sie ein Versprechen wiederholen, bis es erfolgreich aufgelöst wird, mit einer Verzögerung zwischen den einzelnen Wiederholungen. Es verwendet eine for-Schleife, um eine Kette von .catch()-Handlern zu erstellen, gefolgt von einem .then()-Handler für die erfolgreiche Auflösung.

<code class="javascript">var max = 5;
var p = Promise.reject();

for(var i=0; i<max; i++) {
    p = p.catch(attempt).catch(rejectDelay);
}
p = p.then(processResult).catch(errorHandler);</code>

2. Wiederholen, bis die Bedingung im Ergebnis erfüllt ist (ohne Verzögerung)

Mit diesem Muster können Sie ein Versprechen wiederholen, bis eine bestimmte Bedingung im Ergebnis erfüllt ist. Es verwendet einen ähnlichen .catch()-Kettenansatz wie das vorherige Muster, verwendet jedoch anstelle einer RejectDelay einen .then()-Handler, um das Ergebnis zu testen.

<code class="javascript">var max = 5;
var p = Promise.reject();

for(var i=0; i<max; i++) {
    p = p.catch(attempt).then(test);
}
p = p.then(processResult).catch(errorHandler);</code>

3. Wiederholen, bis die Bedingung beim Ergebnis erfüllt ist (mit Verzögerung)

Dieses Muster kombiniert die beiden vorherigen Muster und ermöglicht es Ihnen, ein Versprechen erneut zu versuchen, bis eine Bedingung erfüllt ist, mit einer Verzögerung zwischen jedem Wiederholungsversuch. Es verwendet eine .catch()-Kette, um Wiederholungsversuche zu verarbeiten, und einen .then()-Handler, um den Test durchzuführen und die Verzögerung einzuführen.

<code class="javascript">var max = 5;
var p = Promise.reject();

for(var i=0; i<max; i++) {
    p = p.catch(attempt).then(test).catch(rejectDelay);
}
p = p.then(processResult).catch(errorHandler);</code>

Diese Muster bieten eine prägnante und effiziente Möglichkeit, Wiederholungsversuche mit Promises zu handhaben. Stellen Sie sicher, dass Ihr Code auch dann weiter ausgeführt wird, wenn Fehler auftreten. Sie können an die spezifischen Anforderungen Ihrer Anwendung angepasst werden und Faktoren wie maximale Wiederholungsversuche, Verzögerungsintervalle und Wiederholungsbedingungen ausgleichen.

Das obige ist der detaillierte Inhalt vonWelche Entwurfsmuster gibt es für asynchrone Promise-Wiederholungen?. 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