Maison >interface Web >js tutoriel >Pourquoi « .then(success, fail) » est-il un anti-modèle dans les promesses JavaScript ?
L'argument pour éviter .then(succès, échec)
La FAQ sur la promesse Bluebird déconseille d'utiliser .then(success, fail) comme anti-modèle. Bien que les blocs try-catch puissent sembler analogues, il existe des différences :
Différences de flux de contrôle :
.then(success, fail) renvoie une promesse qui sera rejetée si le rappel de réussite renvoie une erreur. Cela signifie que si l'enregistreur de réussite échoue, l'erreur sera transmise au rappel .catch(), et non au rappel d'échec.
Diagrammes de flux de contrôle :
[ Puis avec deux arguments](https://i.sstatic.net/WAcpP.png)
[Then-catch chaîne](https://i.sstatic.net/wX5mr.png)
Équivalent synchrone :
// then: { try ... catch(e) { ... } else ... } try { var results = some_call(); } catch(e) { logger.log(e); break then; } // else logger.log(results);
Gestion des exceptions :
Le logger .catch() gérera également les exceptions de l'appel du success logger, offrant une gestion des erreurs plus complète. mécanisme.
Anticiper l'utilité de l'anti-modèle
Bien que l'anti-modèle soit généralement déconseillé, il peut être utile lorsque :
Attention : Soyez conscient que cette approche introduit des branchements dans le flux de contrôle.
Alternative à .then(succès, échec)
Pour éviter la duplication de code, pensez à utiliser .catch et .done :
some_promise_call() .catch(function(e) { return e; // it's OK, we'll just log it }) .done(function(res) { logger.log(res); });
Ou vous pouvez opter pour .finally() pour gérer à la fois les scénarios de réussite et d'échec.
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!