Heim >Web-Frontend >js-Tutorial >Welche Entwurfsmuster gibt es für asynchrone Promise-Wiederholungen?
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!