"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment implémenter des modèles de conception de nouvelle tentative de promesse pour une gestion efficace des erreurs ?

Comment implémenter des modèles de conception de nouvelle tentative de promesse pour une gestion efficace des erreurs ?

Publié le 2024-11-10
Parcourir:901

How to Implement Promise Retry Design Patterns for Efficient Error Handling?

Modèles de conception de tentatives de promesse : une approche efficace en matière de mémoire

Lors de l'utilisation de promesses, réessayer les opérations en cas d'échec ou jusqu'à ce que certaines conditions soient remplies satisfait est un besoin commun. Dans cet article, nous explorerons trois modèles de conception de nouvelles tentatives de promesse :

1. Réessayez jusqu'à ce que la promesse soit résolue

Ce modèle continue de réessayer jusqu'à ce que la promesse soit résolue. Il spécifie un nombre maximum de tentatives et un délai entre les tentatives.

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();
  });
};

2. Réessayer jusqu'à ce que la condition du résultat soit remplie

Ce modèle réessaye jusqu'à ce qu'une condition spécifiée soit remplie sur le résultat de la promesse. Il inclut également un nombre maximum de tentatives et un délai entre les tentatives.

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);
        });
    })
    .then(function(){console.log('done')})
    .catch(console.error);

3. Nouvelle tentative dynamique économe en mémoire

Ce modèle utilise une approche récursive, offrant des tentatives illimitées avec un délai configurable.

var max = 5;
var p = Promise.reject();

for(var i=0; i

En créant une chaîne .catch(), ce modèle permet des implémentations concises de nouvelles tentatives, en particulier dans les scénarios avec un faible nombre maximum de tentatives ou des tests synchrones.

Chacun de ces modèles fournit une solution flexible et efficace pour réessayer les opérations Promise. En fonction des exigences de votre application, vous pouvez choisir le modèle qui correspond le mieux à vos besoins.

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729587326. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3