해결하려는 약속의 배열이 있습니다. 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; })
완전히 생략 가능