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>
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>
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>
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!