Maison > interface Web > js tutoriel > Quels sont les modèles de conception essentiels pour les nouvelles tentatives de promesse pour gérer les opérations asynchrones ?

Quels sont les modèles de conception essentiels pour les nouvelles tentatives de promesse pour gérer les opérations asynchrones ?

Patricia Arquette
Libérer: 2024-10-22 17:59:03
original
826 Les gens l'ont consulté

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

Conceptions de réessais de promesses

Les promesses permettent une programmation asynchrone, fournissant un mécanisme flexible et efficace pour gérer les opérations asynchrones. Cependant, il peut être nécessaire de concevoir des modèles pour gérer les scénarios dans lesquels une promesse nécessite de nouvelles tentatives. Nous présentons ici trois modèles de conception de nouvelle tentative de promesse différents :

  1. Réessayer jusqu'à ce que la promesse soit résolue (avec Delay et 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>
Copier après la connexion
  1. Réessayer jusqu'à la condition sur le résultat (avec délai et 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>
Copier après la connexion
  1. Réessai dynamique efficace en mémoire (avec tentatives illimitées)

Nous explorons une approche alternative basée sur la construction d'une chaîne .catch() au lieu de la chaîne .then() habituelle :

<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>
Copier après la connexion

Ce modèle convient aux scénarios avec un nombre limité de tentatives et un nombre maximum faible pour éviter les problèmes de consommation de mémoire.

  1. Réessayez jusqu'à ce que le résultat réponde à la condition (sans délai)
<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>
Copier après la connexion
  1. Réessayez jusqu'à ce que le résultat réponde aux conditions (avec délai)
<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>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal