Ho una serie di promesse con cui sto risolvendo Promise.all(arrayOfPromises);
Continuo per continuare la catena di promesse. Sembra qualcosa del genere
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();
});
Voglio aggiungere una dichiarazione catch per gestire una promessa individuale nel caso in cui si verifichi un errore, ma quando provo Promise.all
restituisce il primo errore che trova (ignora il resto), quindi non riesco a ottenere i dati dal resto delle promesse in l'array (che non ha dato errori).
Ho provato a fare qualcosa come ..
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();
});
Ma questo non si risolve.
Grazie!
-
Modificare:
Ciò che le risposte sotto riportate erano completamente vere, il codice si stava rompendo per altri motivi. Nel caso qualcuno fosse interessato, questa è la soluzione con cui ho finito ...
Catena di server 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;
})
};
Chiamata API (chiamata route.async)
return async()
.then(function(result) {
// dispatch a success
return result;
})
.catch(function(err) {
// dispatch a failure and throw error
throw err;
});
Mettere il .catch
for Promise.all
prima del .then
sembra aver servito allo scopo di catturare eventuali errori dalle promesse originali, ma poi riportare l'intero array al successivo.then
Grazie!
.then(function(data) { return data; })
può essere completamente omesso
then
o catch
e c'è un errore che viene lanciato all'interno. A proposito, questo nodo?