私は解決している約束の配列を持っています 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();
});
しかし、それは解決しません。
ありがとう!
-
編集:
以下の答えが完全に真実であるということは、コードは他の理由で壊れていました。誰かが興味を持っている場合に備えて、これが私が最終的に解決したソリューションです...
ノードエクスプレスサーバーチェーン
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
ことは、元のpromiseからのエラーをキャッチする目的で機能したようですが、配列全体を次の場所に返します.then
ありがとう!
.then(function(data) { return data; })
完全に省略可能