0
votes

Nœud.js problème dans l'essai attrayez avec alors

J'écris une fonction try-capture et à l'intérieur de l'essai, j'exécute alors des promesses de capture. Je veux jeter l'erreur pour traiter, attraper. Je ne sais pas comment l'expliquer. S'il vous plaît examiner mon code et vous comprendrez le problème ici:

try {
  function().then(result =>{
    if(result){
      // do something
      function2().then(result =>{
        if(result){
        // do something
        }else{
        throw "bad request";
        }
       }).catch((error)=>{
        throw error
       })
    }else{
      throw "not found";
    }
  }).catch(error =>{
    throw error
  });
}catch (error){
  callback(BAD_REQUEST);
}


2 commentaires

Pourquoi ne mettez-vous pas le rappel (bad_request) à l'intérieur de la première prise?


@Davidebulbarelli cause car il y a beaucoup de captures à l'intérieur de la fonction Try-Catch lorsque j'appelle "rappel" à l'intérieur de toutes les fonctions de capture, ce sera un code répétable là-bas.


3 Réponses :


0
votes

Vous avez une idée fausse sur la façon dont les promesses fonctionnent.

Lorsque vous appelez une promesse, c'est un appel d'Asynchronus, le fil principal ne sait pas quand il va finir. Pour cette raison, vous devez utiliser "alors ()", de sorte que le code sera exécuté chaque fois que la promesse se termine.

Pour la même raison, vous ne pouvez pas attraper une erreur que vous ne savez pas quand cela se produira. Donc, ce bloc d'essais, il ne fait rien.

Que faire? Eh bien, si vous avez besoin de savoir comment cette promesse se termine, vous pouvez utiliser attendre opérateur.

En outre, vous pouvez avoir un auditeur d'erreur global (dépend de quelle plate-forme et la langue utilisez-vous), mais c'est une question différente.


2 commentaires

Je ré-modifier mon code. Je peux simplement rappeler à l'intérieur de la capture, mais ici, j'ai beaucoup d'appels de capture, de sorte que cela sera répétable. C'est pourquoi j'essaie de faire une erreur d'erreur de la capture et de prendre des captures d'attraction et de faire un rappel .. Pouvez-vous comprendre ce que j'essaie de faire ici


Je pense que je comprends ce que vous voulez faire, mais ce n'est pas comme ça que ça va. La capture traitante en dehors de la promesse ne fonctionnera pas car c'est un flux de code différent de celui de la promesse. Comprenez-vous cela ou voulez-vous que je modifie ma réponse avec un exemple?



0
votes

.Ce reçoit une fonction de rappel. Pour attraper l'erreur, vous devez mettre l'essai à l'intérieur ..Chen rappel.

Que faire?

Attirer une erreur d'une promesse Vous pouvez soit utiliser .Catch () ou utiliser moderne async / attendre.


0 commentaires

0
votes

Si j'ai eu votre point de vue, vous pouvez utiliser attendre / async ( Vérifier ce guide ) .

try {
  firstResult = await function1();
  if(firstResult) {
    secondResult = await function2();
    if(secondResult){
       //do something
    }
    else {
       throw "bad request"
    }
  }
  else {
    throw "not found"
  }
}
catch (err) {
   callback(err)
}


0 commentaires