Tenho uma série de promessas que estou resolvendo com Promise.all(arrayOfPromises);
Eu continuo a cadeia de promessas. Parece algo como isto
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();
});
Quero adicionar uma instrução catch para lidar com uma promessa individual, caso ocorra um erro, mas, quando tento, Promise.all
retorna o primeiro erro encontrado (desconsidera o restante) e não consigo obter os dados do restante das promessas em a matriz (que não errou).
Eu tentei fazer algo como ..
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();
});
Mas isso não resolve.
Obrigado!
-
Editar:
O que as respostas abaixo disseram eram completamente verdadeiras, o código estava quebrando devido a outros motivos. Caso alguém esteja interessado, esta é a solução que eu acabei com ...
Cadeia de servidores 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;
})
};
Chamada de API (rota.async chamada)
return async()
.then(function(result) {
// dispatch a success
return result;
})
.catch(function(err) {
// dispatch a failure and throw error
throw err;
});
Colocar o .catch
for Promise.all
antes do .then
parece ter servido ao objetivo de capturar quaisquer erros das promessas originais, mas retornar a matriz inteira para a próxima.then
Obrigado!
.then(function(data) { return data; })
pode ser completamente omitido
then
ou catch
e se houver um erro dentro dele. A propósito, esse nó é?