0
votes

Éviter les rappels et nid si des déclarations

Comment pourrais-je éviter ce désordre? Que faire. Tous les conseils sur le refactoring Ce désordre seraient super merci. XXX


2 commentaires

Valider d'abord pas comme d'autre


Je vois Merci!


3 Réponses :


1
votes

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);
        });
    });
}


0 commentaires

2
votes

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> xxx pré>

Vous pouvez écrire xxx pré>

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)) {
 // ...
}


0 commentaires

1
votes

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 , puis faites votre code normal. Donc, disons que vous avez: xxx

c'est ok mais vous rencontrez vraiment des problèmes dès que vous obtenez xxx

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.

Pour éviter cela, vous pouvez quitter tôt. Les étapes à suivre pour convertir votre code sont les mêmes:

  1. Retournez la condition du si qui vérifie le succès pour vérifier les erreurs
  2. échangez le si bloc et le bloc ele bloque.
  3. Ajouter un retour au si .
  4. Supprimez le bloc sinon et aplatit-le.

    et vous obtenez les suivants xxx

    Vous retirez maintenant la nidification et déposez les blocs d'autre, puisque vous allez simplement retour et quittez la fonction. Si votre manipulation d'erreur est une instruction qui existe déjà l'exécution, vous n'avez donc pas besoin de retour .

    La prochaine chose est que vous avez une logique en double ici: xxx

    si destructeur est admin ou modérateur que vous appelez le même deletebyone 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: xxx

    au lieu de cela, vous pouvez simplement faire le chèque si un modérateur fait la suppression d'abord et si Ils font ont suffisamment d'autorisations, ils sont un administrateur, puis faites simplement la suppression une fois: xxx

    donc, si nous appliquons ces deux choses: < / p>

    • Inverser la logique et sortez tôt
    • Supprimer le code dupliqué

      Alors votre code ressemble à ceci: xxx

      une note - j'ai converti la condition drotheruser.role == "admin" | | drotheruser.role == "modérateur" à drotheruser.role! == "admin" && detrotheruser.role! == "modérateur" C'est parce que je n'aime pas un booléen non Devant de longues expressions: xxx

      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 non ( A ou B) = pas un et pas b . Par conséquent, comment je l'ai changé à cela.

      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: xxx

      donc, vous pouvez appeler erreur ("utilisateur non trouvé ") , 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.


1 commentaires

Great Stuff Mate! Merci!