J'ai un éventail de promesses avec lesquelles je résous Promise.all(arrayOfPromises);
Je continue la chaîne de promesses. Ressemble à quelque chose comme ça
existingPromiseChain = existingPromiseChain.then(function() {
var arrayOfPromises = state.routes.map(function(route){
return route.handler.promiseHandler();
});
return Promise.all(arrayOfPromises)
});
existingPromiseChain = existingPromiseChain.then(function(arrayResolved) {
// do stuff with my array of resolved promises, eventually ending with a res.send();
});
Je veux ajouter une instruction catch pour gérer une promesse individuelle en cas d'erreur, mais lorsque j'essaie, Promise.all
renvoie la première erreur trouvée (ignore le reste), puis je ne peux pas obtenir les données du reste des promesses dans le tableau (qui n'a pas fait d'erreur).
J'ai essayé de faire quelque chose comme ..
existingPromiseChain = existingPromiseChain.then(function() {
var arrayOfPromises = state.routes.map(function(route){
return route.handler.promiseHandler()
.then(function(data) {
return data;
})
.catch(function(err) {
return err
});
});
return Promise.all(arrayOfPromises)
});
existingPromiseChain = existingPromiseChain.then(function(arrayResolved) {
// do stuff with my array of resolved promises, eventually ending with a res.send();
});
Mais cela ne résout pas.
Merci!
-
Éditer:
Ce que les réponses ci-dessous ont dit était complètement vrai, le code cassait pour d'autres raisons. Si quelqu'un est intéressé, c'est la solution avec laquelle je me suis retrouvé ...
Chaîne de serveurs Node Express
serverSidePromiseChain
.then(function(AppRouter) {
var arrayOfPromises = state.routes.map(function(route) {
return route.async();
});
Promise.all(arrayOfPromises)
.catch(function(err) {
// log that I have an error, return the entire array;
console.log('A promise failed to resolve', err);
return arrayOfPromises;
})
.then(function(arrayOfPromises) {
// full array of resolved promises;
})
};
Appel API (appel route.async)
return async()
.then(function(result) {
// dispatch a success
return result;
})
.catch(function(err) {
// dispatch a failure and throw error
throw err;
});
Mettre le .catch
for Promise.all
avant le .then
semble avoir permis de détecter les erreurs des promesses originales, mais de renvoyer ensuite l'ensemble du tableau au suivant.then
Merci!
.then(function(data) { return data; })
peut être complètement omis
then
ou catch
et qu'une erreur est générée à l'intérieur. Soit dit en passant, est ce nœud?