Maison > interface Web > js tutoriel > le corps du texte

Quels modèles de conception existent pour les tentatives de promesse asynchrone ?

Mary-Kate Olsen
Libérer: 2024-10-22 18:53:03
original
275 Les gens l'ont consulté

Which Design Patterns Exist for Asynchronous Promise Retries?

Conception de modèles pour les nouvelles tentatives de promesses

Dans la programmation asynchrone, il est souvent utile de réessayer les promesses qui ont échoué jusqu'à ce qu'elles soient résolues. Voici trois modèles de conception pour y parvenir avec Promises :

1. Réessayer jusqu'à ce que la promesse soit résolue (avec délai et tentatives maximales)

Ce modèle vous permet de réessayer une promesse jusqu'à ce qu'elle soit résolue avec succès, avec un délai entre chaque nouvelle tentative. Il utilise une boucle for pour créer une chaîne de gestionnaires .catch(), suivi d'un gestionnaire .then() pour une résolution réussie.

<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

2. Réessayer jusqu'à ce que la condition soit remplie sur le résultat (sans délai)

Ce modèle vous permet de réessayer une promesse jusqu'à ce qu'une condition spécifique soit remplie sur le résultat. Il utilise une approche de chaîne .catch() similaire au modèle précédent, mais au lieu d'un rejetDelay, il utilise un gestionnaire .then() pour tester le résultat.

<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

3. Réessayer jusqu'à ce que la condition soit remplie sur le résultat (avec délai)

Ce modèle combine les deux modèles précédents, vous permettant de réessayer une promesse jusqu'à ce qu'une condition soit remplie, avec un délai entre chaque nouvelle tentative. Il utilise une chaîne .catch() pour gérer les tentatives et un gestionnaire .then() pour effectuer le test et introduire le 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);
}
p = p.then(processResult).catch(errorHandler);</code>
Copier après la connexion

Ces modèles fournissent un moyen concis et efficace de gérer les tentatives avec des promesses, garantissant que votre code continue de s'exécuter même en cas d'échecs. Ils peuvent être personnalisés pour répondre aux besoins spécifiques de votre application, en équilibrant des facteurs tels que le nombre maximal de tentatives, les intervalles de délai et les conditions de nouvelle tentative.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!