Tengo una serie de promesas con las que estoy resolviendo Promise.all(arrayOfPromises);
Continúo para continuar la cadena de promesa. Se ve algo como esto
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();
});
Quiero agregar una declaración catch para manejar una promesa individual en caso de que se produzca un error, pero cuando lo intento, Promise.all
devuelve el primer error que encuentra (ignora el resto), y luego no puedo obtener los datos del resto de las promesas en la matriz (que no falló).
He intentado hacer 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();
});
Pero eso no se resuelve.
¡Gracias!
-
Editar:
Lo que dijeron las respuestas a continuación era completamente cierto, el código se estaba rompiendo debido a otras razones. En caso de que alguien esté interesado, esta es la solución con la que terminé ...
Cadena de servidor Express Node
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;
})
};
Llamada API (llamada route.async)
return async()
.then(function(result) {
// dispatch a success
return result;
})
.catch(function(err) {
// dispatch a failure and throw error
throw err;
});
Poner el .catch
for Promise.all
antes del .then
parece haber servido para capturar cualquier error de las promesas originales, pero luego devolver toda la matriz al siguiente.then
¡Gracias!
.then(function(data) { return data; })
puede omitirse por completo
then
o catch
hay un error que se arroja dentro. Por cierto, ¿es este nodo?