Maison > interface Web > js tutoriel > Pourquoi « .then(success, fail) » est-il considéré comme un anti-modèle dans la gestion des promesses ?

Pourquoi « .then(success, fail) » est-il considéré comme un anti-modèle dans la gestion des promesses ?

Barbara Streisand
Libérer: 2024-12-25 18:42:14
original
885 Les gens l'ont consulté

Why is `.then(success, fail)` Considered an Anti-pattern in Promise Handling?

Inconvénients de l'utilisation de .then(succès, échec) pour la gestion des promesses

Question :

Dans la documentation Bluebird Promise, .then(succès, fail) est étiqueté comme un anti-modèle. Quelle est la raison derrière cela ?

Réponse :

Contrairement au chaînage .then(success).catch(fail) recommandé, l'utilisation de .then(success, fail) pose un problème de flux de contrôle :

  • S'il y a une erreur dans le rappel de réussite, elle est propagée au prochain gestionnaire .catch(), ignorer efficacement le rappel d'échec.

Comparaison des flux de contrôle :

Utilisation de .then (succès, échec) :

try {
    results = some_call();
} catch (e) {
    logger.log(e);
    break then;
} else
    logger.log(results);
Copier après la connexion

Utilisation .then(success).catch(fail) :

try {
    var results = some_call();
    logger.log(results);
} catch (e) {
    logger.log(e);
}
Copier après la connexion

Raison d'être :

L'anti-modèle est déconseillé car il limite la gestion des erreurs à un seul gestionnaire de capture final. Cependant, cela peut être utile dans les scénarios où :

  • Vous souhaitez gérer les erreurs dans une étape de rappel spécifique.
  • Vous avez besoin d'une gestion différente pour les cas d'erreur et de non-erreur (en branchant le flux de contrôle).

Raffinement :

Pour éviter de répéter les rappels, vous pouvez utiliser ce qui suit pattern :

some_promise_call()
   .catch(function(e) {
       return e; // it's OK, we'll just log it
   })
   .done(function(res) {
       logger.log(res);
   });
Copier après la connexion

Vous pouvez également utiliser la méthode .finally() à cet effet.

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!

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