Dans la documentation Bluebird Promise, .then(succès, fail) est étiqueté comme un anti-modèle. Quelle est la raison derrière cela ?
Contrairement au chaînage .then(success).catch(fail) recommandé, l'utilisation de .then(success, fail) pose un problème de 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);
Utilisation .then(success).catch(fail) :
try { var results = some_call(); logger.log(results); } catch (e) { logger.log(e); }
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ù :
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); });
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!