Promise.all 中的错误处理
我有一系列承诺,我正在解决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,以防它出错,但是当我尝试时,它会返回它找到的第一个错误(忽略其余错误),然后我无法从数组中的其余 promise 中获取数据(没有错误)。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;
});
将 for 放在 前面似乎已经达到了从原始承诺中捕获任何错误的目的,但随后将整个数组返回到下一个.catch
Promise.all
.then
.then
谢谢!