У меня есть массив Обещаний, с которыми я разрешаю 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
возвращает первую найденную ошибку (игнорирует остальные), а затем я не могу получить данные из остальных обещаний в массив (это не ошибка).
Я пытался сделать что-то вроде ..
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)
return async()
.then(function(result) {
// dispatch a success
return result;
})
.catch(function(err) {
// dispatch a failure and throw error
throw err;
});
Помещение .catch
for Promise.all
перед тем, .then
как кажется, послужило цели отлова любых ошибок из исходных обещаний, но затем возврата всего массива следующему.then
Спасибо!
.then(function(data) { return data; })
может быть полностью опущен
then
или, catch
и внутри выдается ошибка. Кстати, этот узел?