У мене є масив Обіцянь, які я вирішую Promise.all(arrayOfPromises);
Я продовжую продовжувати ланцюжок обіцянок. Виглядає приблизно так
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();
});
Я хочу додати заяву про вилов для обробки окремої обіцянки у випадку помилки, але коли я намагаюся, Promise.all
повертає першу виявлену помилку (ігнорує решту), і тоді я не можу отримати дані з решти обіцянок у масив (це не помилка).
Я намагався робити щось на кшталт ..
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();
});
Але це не вирішує.
Дякую!
-
Редагувати:
Що відповіді, сказані нижче, були повністю правдивими, код був порушений через інші причини. У випадку, якщо хтось зацікавлений, це рішення, з яким я закінчився ...
Ланцюг сервера 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;
})
};
API-виклик (route.async call)
return async()
.then(function(result) {
// dispatch a success
return result;
})
.catch(function(err) {
// dispatch a failure and throw error
throw err;
});
Якщо зібрати .catch
для Promise.all
до того , як .then
здається, має на меті зловити будь-які помилки від первинних обіцянок, але потім повертаючи весь масив до наступного.then
Дякую!
.then(function(data) { return data; })
можна повністю пропустити
then
або catch
обробниках, і все-таки помилка закидається всередину. До речі, це вузол?