Comment pourrais-je éviter ce désordre? Que faire. Tous les conseils sur le refactoring Ce désordre seraient super merci.
3 Réponses :
Un de mes styles ou modèles préférés pour ce type de code est une terminaison précoce (je ne sais pas si elle a un nom bien connu mais c'est ce que je l'appelle). Plutôt, nichant des chemins heureux avec des chemins d'erreur à l'autre. Je mettais des chemins d'erreur dans une résiliation anticipée conditionnelle.
function getUser(userId) { // Return a promise to the caller that will be resolved or rejected // in the future. Callers can use Promise then or Await for a result. return new Promise((resolve, reject) => { User.getUserById(userId, (err, user) => { // If there is an error, call reject, otherwise resolve err ? reject(err) : resolve(user); }); }); }
Eh bien, au début, comme @lawrencecheron a dit, vous devez la valider en premier, et non dans les instructions d'enrête.
au lieu d'écrire p> Vous pouvez écrire Deuxièmement, vous pouvez extraire l'ID utilisateur sur une variable, au lieu de enchaîner les touches d'objets, c'est-à-dire P> au lieu d'écrire P> const isSameUserId = (id, sample) => id === sample;
const userId = user._id.toString();
const destroyerId = destroyerUser._id.toString();
if (!isSameUserId(userId, destroyerId)) {
// ...
}
Il y a quelques éléments que vous pouvez faire avec des pyramides latérales imbriquées. Une technique jolie universelle est de gérer les erreurs premier em>, puis faites votre code normal. Donc, disons que vous avez: c'est ok em> mais vous rencontrez vraiment des problèmes dès que vous obtenez p> Vous commencez immédiatement à empiler de plus en plus de blocs. De plus, la logique du succès est généralement beaucoup importante, car vous devez faire plus de choses plus tard. Et la logique de traitement des erreurs pourrait être une seule ligne. Donc, si vous voulez savoir ce qui se passe, sur une erreur, vous devez faire défiler beaucoup. P> Pour éviter cela, vous pouvez quitter tôt. Les étapes à suivre pour convertir votre code sont les mêmes: p> et vous obtenez les suivants p> Vous retirez maintenant la nidification et déposez les blocs d'autre, puisque vous allez simplement La prochaine chose est que vous avez une logique en double ici: p> si au lieu de cela, vous pouvez simplement faire le chèque si un modérateur fait la suppression d'abord et si Ils font em> ont suffisamment d'autorisations, ils sont un administrateur, puis faites simplement la suppression une fois: p> donc, si nous appliquons ces deux choses: < / p> Alors votre code ressemble à ceci: p> une note - j'ai converti la condition Il est facile de manquer car vous voyez d'abord les expressions ou les deux expressions. Heureusement, c'est très facilement changeant à l'aide de Law de Morgan pour expressions booléennes Vous pouvez réduire davantage une partie de la duplication de code en ajoutant une nouvelle fonction pour gérer toutes les erreurs. Dans tous les cas, vous faites la même chose, en plus de passer un message différent, vous pouvez donc avoir: p> donc, vous pouvez appeler
si code> qui vérifie le succès pour vérifier les erreurs li>
si code> bloc et le bloc
ele code> bloque. li>
retour code> au
si code>. li>
sinon code> et aplatit-le. LI>
ol>
retour code> et quittez la fonction. Si votre manipulation d'erreur est une instruction code> code> qui existe déjà l'exécution, vous n'avez donc pas besoin de
retour code>. p>
destructeur code> est admin ou modérateur que vous appelez le même
deletebyone code> dans les deux cas. Et vous retournez également le même message de réussite dans les deux cas. Donc, vous avez six branches différentes dans le code alors que vous n'avez que trois résultats: p>
drotheruser.role == "admin" | | drotheruser.role == "modérateur" code> à
drotheruser.role! == "admin" && detrotheruser.role! == "modérateur" code> C'est parce que je n'aime pas un booléen non Devant de longues expressions: p>
non ( A ou B) = pas un et pas b code>. Par conséquent, comment je l'ai changé à cela. P>
erreur ("utilisateur non trouvé ") code>, par exemple. Cela ne réduit pas vraiment la quantité de code que vous avez, mais c'est plus cohérent de cette façon. De plus, si vous décidez d'ajouter plus de choses à la réponse d'erreur (par exemple, envoyez des en-têtes supplémentaires, ou si vous souhaitez essayer de traduire le message d'erreur), vous avez un emplacement central pour celui-ci. P> P>
Great Stuff Mate! Merci!
Valider d'abord pas comme d'autre
Je vois Merci!