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); }
3 Réponses :
Vous avez une idée fausse sur la façon dont les promesses fonctionnent. P>
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. P>
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. P>
Que faire? Eh bien, si vous avez besoin de savoir comment cette promesse se termine, vous pouvez utiliser 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. P> attendre code> opérateur. P>
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?
Que faire? strong> p>
Attirer une erreur d'une promesse Vous pouvez soit utiliser .Ce code> reçoit une fonction de rappel. Pour attraper l'erreur, vous devez mettre l'essai à l'intérieur ..Chen rappel. P>
.Catch () code> ou utiliser moderne async / attendre. p>
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) }
Pourquoi ne mettez-vous pas le rappel
(bad_request) code> à 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.