105 votes

Erreur de relance dans la capture de la promesse

J'ai trouvé le code suivant dans un tutoriel :

promise.then(function(result){
    //some code
}).catch(function(error) {
    throw(error);
});

Je suis un peu confus : est-ce que l'appel à la prise accomplit quelque chose ? Il me semble qu'il n'a pas d'effet, puisqu'il lance simplement la même erreur que celle qui a été attrapée. Je me base sur le fonctionnement d'un try/catch classique.

0 votes

Pourriez-vous fournir un lien vers le tutoriel ? Peut-être y a-t-il un contexte supplémentaire qui serait utile...

0 votes

@Igor Je ne peux pas, c'est sur Pluralsight. C'est peut-être juste un espace pour une logique de gestion des erreurs ?

0 votes

C'est ce que je suppose, car il ne fait rien de plus que de transmettre l'erreur à l'appelant, ce qui pourrait également être accompli en n'ayant pas le catch pour commencer.

0voto

Wagner Pereira Points 287

Dans la chaîne de promesses, il est préférable d'utiliser .catch.

ex dans la fonction f2 : .then(...).catch(e => reject(e)) ;

  • test1 - avec try catch
  • test2 - sans try ou .catch
  • test3 - avec .catch

    function f1() { return new Promise((resolve, reject) => { throw new Error('test'); }); }

    function f2() { return new Promise((resolve, reject) => { f1().then(value => { console.log('f1 ok ???'); }).catch(e => reject(e)); }); }

    function test1() { console.log('test1 - with try catch - look in F12'); try { f2().then(() => { // Uncaught (in promise) Error: test console.log('???'); }); } catch (e) { console.log('this error dont catched'); } }

    function test2() { console.log('test2 - without try or .catch - look in F12'); f2(); // Uncaught (in promise) Error: test }

    function test3() { console.log('test3 - with .catch'); f2().then(value => { console.log('??'); }).catch(e => { console.log(' now its ok, error ', e); }) }

    setTimeout(() => { test1(); setTimeout(() => { test2(); setTimeout(() => { test3(); }, 100); }, 100); }, 100);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X