У меня есть массив из Promises, который я разрешаю с помощью 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();
});
Я хочу добавить оператор catch для обработки отдельного обещания в случае его ошибок, но когда я пытаюсь, Promise.all возвращает первую обнаруженную ошибку (игнорирует остальную), а затем я не могу получить данные из остальная часть Promises в массиве (это не ошибка).
Я пробовал делать что-то вроде..
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();
});
Но это не решает.
Спасибо!
-
Edit:
Какие ответы ниже были полностью верны, код нарушался по другим причинам. В случае, если кто-то заинтересован, это решение, в котором я закончил...
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;
})
};
Вызов API (вызов route.async)
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, похоже, послужил целью уловить любые ошибки из исходного promises, но затем вернул весь массив к следующему. then
Спасибо!