【发布时间】:2018-05-07 21:02:58
【问题描述】:
我在一个简单的脚本中逐字记录:
Promise.all(links.map(function (l) {
return Promise.resolve(require(l).r2gSmokeTest())
.then((v:any) => ({path: l, result: v}));
}))
.then(function(results){
})
.catch(function(e){
}):
问题在于,如果 require() 调用无论出于何种原因抛出错误,promise 链都不会捕获它。
避免这种情况的最简单方法是将 Promise.all 包装在一个函数中,如下所示:
const getAllPromises = function(links){
return Promise.resolve(null).then(function(){
return Promise.all(links.map(function (l) {
return Promise.resolve(require(l).r2gSmokeTest())
.then((v:any) => ({path: l, result: v}));
}));
在我看来,也许 Promise.all 应该有一个不同的 API,比如:
Promise.all(function(){
return values.map(v => whatever);
});
这样,如果 Promise.all 没有在 Promise 链中调用,任何错误都可以被捕获......
【问题讨论】:
-
你的问题到底是什么?
-
@Bergi 好像你已经明白了,抱歉没那么清楚
标签: javascript node.js ecmascript-6 es6-promise