bonjour,

j essaye de chainer des promises dans node.js, mais je ne comprends pas le fonctionnement de .catch(), voici mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var chainedPromise = promise1.then(promise1).then(promise2);
 
if (toto) {
    chainedPromise = chainedPromise.then(promise3);
}
 
chainedPromise
    .then(promise4)
    .then(promise5)
    .then(function() {
        res.render('/page1');
    })
    .catch(function() {
        res.render('/page2');
    });
pour précision:

- la plupart des promises font des requêtes a la bdd (avec mongodb)

- certaines utilisent le retour des promises precedente

- certaines de ces promises lancent des exceptions (throw new Error(...)) dans certains cas

je pensais que lancer des exceptions/throw dans une chaine de promises arreterai la chaine et passerait dans le block catch. mais ce qui se passe c est que je passe bien dans le block catch, mais la chaine continue !!!!!! par exemple si promise2 renvoit une exception, alors j execute le block catch mais je me rends compte que toutes les then qui suivent se sont aussi executé!

j ai trouvé sur un autre forum que la solution suivante pourrait marcher:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
var chainedPromise = promise1.then(promise2, errorFunction).then(promise3, errorFunction);
 
if (toto) {
    chainedPromise = chainedPromise.then(promise4, errorFunction);
}
 
chainedPromise
    .then(promise5, errorFunction)
    .then(promise6, errorFunction)
    .then(function() {
        res.render('/page1');
    }, errorFunction);
mais je trouve ca tres tres tres moche lol

est ce que qqn peut m aider, je ne comprends pas comment gerer les exceptions/reject dans une chaine de promise et toutes les recuperer au meme endroit et sortir de ma chaine ...

merci d avance pour les propositions, maintenant je vais manger parce que ca fait mal a la tete l asynchrone ^^