Heim > Web-Frontend > js-Tutorial > Hauptteil

Was sind die wesentlichen Promise-Retry-Entwurfsmuster für die Handhabung asynchroner Vorgänge?

Patricia Arquette
Freigeben: 2024-10-22 17:59:03
Original
735 Leute haben es durchsucht

What Are the Essential Promise Retry Design Patterns for Handling Asynchronous Operations?

Promise Retry Designs

Promises ermöglichen die asynchrone Programmierung und bieten einen flexiblen und effizienten Mechanismus für die Handhabung asynchroner Vorgänge. Es kann jedoch erforderlich sein, Muster zu entwerfen, um Szenarien zu bewältigen, in denen ein Versprechen Wiederholungsversuche erfordert. Hier stellen wir drei verschiedene Entwurfsmuster für Versprechenswiederholungen vor:

  1. Wiederholen, bis das Versprechen gelöst wird (mit Verzögerung und MaxRetries)
<code class="javascript">Promise.retry = function(fn, times, delay) {
    return new Promise(function(resolve, reject){
        var error;
        var attempt = function() {
            if (times == 0) {
                reject(error);
            } else {
                fn().then(resolve)
                    .catch(function(e){
                        times--;
                        error = e;
                        setTimeout(function(){attempt()}, delay);
                    });
            }
        };
        attempt();
    });
};</code>
Nach dem Login kopieren
  1. Wiederholen bis zur Bedingung des Ergebnisses (mit Verzögerung und MaxRetries)
<code class="javascript">work.publish()
    .then(function(result){
        return new Promise(function(resolve, reject){
            var intervalId = setInterval(function(){
                work.requestStatus(result).then(function(result2){
                    switch(result2.status) {
                        case "progress": break; //do nothing
                        case "success": clearInterval(intervalId); resolve(result2); break;
                        case "failure": clearInterval(intervalId); reject(result2); break;
                    }
                }).catch(function(error){clearInterval(intervalId); reject(error)});
            }, 1000);
        });
    })</code>
Nach dem Login kopieren
  1. Speichereffizienter dynamischer Wiederholungsversuch (mit unbegrenzten Wiederholungsversuchen)

Wir untersuchen einen alternativen Ansatz, der auf dem Aufbau einer .catch()-Kette anstelle der üblichen .then()-Kette basiert:

<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>
Nach dem Login kopieren

Dieses Muster eignet sich für Szenarien mit einer begrenzten Anzahl von Wiederholungsversuche und eine niedrige maximale Anzahl, um Speicherverbrauchsprobleme zu vermeiden.

  1. Erneut versuchen, bis das Ergebnis die Bedingung erfüllt (ohne Verzögerung)
<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>
Nach dem Login kopieren
  1. Erneut versuchen, bis das Ergebnis die Bedingung erfüllt (mit Verzögerung)
<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);
    // Don't simplify this to `p.catch(attempt).then(test, rejectDelay)` as test failures won't be caught.
}
p = p.then(processResult).catch(errorHandler);</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWas sind die wesentlichen Promise-Retry-Entwurfsmuster für die Handhabung asynchroner Vorgänge?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!