Corriger Try...Catch De La Syntaxe À L'Aide Async/Await
J'aime la planéité de la nouvelle Async/Await
fonctionnalité disponible en caractères d'imprimerie, etc. Cependant, je ne suis pas sûr que j'aime le fait que je dois déclarer la variable, je suis await
ing à l'extérieur d'un try...catch
bloc afin de l'utiliser plus tard. Comme:
let createdUser
try {
createdUser = await this.User.create(userInfo)
} catch (error) {
console.error(error)
}
console.log(createdUser)
//business
//logic
//goes
//here
S'il vous plaît corrigez-moi si je me trompe, mais il semble être la meilleure pratique pas de placer plusieurs lignes de la logique métier dans le try
corps, donc je suis reste que l'alternative de déclarer createdUser
à l'extérieur du bloc, l'affectant dans le bloc, puis à l'utiliser après.
Quelles sont les meilleures pratiques dans ce cas?
Les "meilleures pratiques" est d'utiliser ce qui fonctionne et est compréhensible et maintenable, etc.. Comment pourrions-nous répondre à cette question "correctement"? Je venais d'utiliser
try/catch doit contenir exactement ce que vous voulez capturer une exception. Si vous êtes à la recherche explicitement pour les erreurs provenant de
var
, sachant que la variable serait hissé. C'est que "le mal"?try/catch doit contenir exactement ce que vous voulez capturer une exception. Si vous êtes à la recherche explicitement pour les erreurs provenant de
this.User.create()
alors vous ne serait pas mettre autre chose à l'intérieur de la try/catch. Mais, il est parfaitement raisonnable de conception pour mettre tout un tas de logique à l'intérieur d'un bloc try. Tout dépend de comment/où vous voulez gérer une erreur et comment vous souhaitez concevoir votre code de gestion des exceptions et ce qui fait sens pour une opération donnée. Il n'y a pas de générique de meilleures pratiques. L'UN des génériques de la meilleure pratique est de s'assurer que vous attrapez et de gérer toutes les erreurs d'une manière appropriée.async/await
fait partie de ES2017 (de cette année), pas ES6 (qui a été publié il y a deux ans).OriginalL'auteur Spencer Allen Gardner | 2017-06-20
Vous devez vous connecter pour publier un commentaire.
En fait, je dirais que c'est. Vous voulez généralement à
catch
tous exceptions de travailler avec la valeur:Si vous voulez attraper et à manipuler que les erreurs de la promesse, vous avez trois choix:
Déclarer la variable en dehors, et de la direction générale selon qu'il y a une exception ou pas. Qui peut prendre diverses formes, comme
catch
blocreturn
tôt ou re-throw
une exception de lacatch
bloccatch
bloc pris une exception, et de tester dans unif
conditionTest l'exception interceptée à son type, et la poignée ou le renvoyer sur la base que la.
Malheureusement, JavaScript standard (encore) n'ont pas de charge de la syntaxe pour des exemptions conditionnelles.
Utilisation
avec deux rappels au lieu de
try
/catch
. C'est vraiment le moins laid et ma recommandation personnelle aussi pour sa simplicité et sa justesse, en ne s'appuyant pas sur tagged des erreurs ou des regards de la valeur du résultat de la distinction entre la réalisation et le rejet de la promesse:Bien sûr, il est livré avec l'inconvénient d'introduire des fonctions de rappel, ce qui signifie que vous ne peut pas aussi facilement
break
/continue
de boucles ou de faire le début dureturn
s à partir de l'extérieur de la fonction..then()
pour résoudre la promesse et de fournir un rappel, peut-êtreawait
n'a aucun effet.Il est
await
ing la promesse renvoyé par la.then(…)
appel.ne les lambdas renvoyé par la
.then()
appel doivent async mot-clé?Que s'ils utilisent
await
à l'intérieur.OriginalL'auteur Bergi