使用此代码,我们有一个包含promise
语句的try-catch
。
try
的主体调用一个失败的函数,我想将错误向前传递给promise的catch
方法。
function failingFunc() {
let undef = undefined;
return undef.nope();
}
let promise = new Promise((resolve, reject) => {
try {
let thisWillFail = failingFunc();
resolve(thisWillFail);
} catch (e) {
reject(e); // (1) Cannot read property 'nope' of undefined
}
});
promise.then(v => {
console.log(v);
}).catch(e => {
console.log(e); // (2)
});
然而,它在(1)处爆炸,从未到达(2)。
为什么是这样?我怎样才能获得所需的功能?
编辑1:
我在Node中运行,这是我得到的确切错误:
编辑2:
删除try-catch
的结果几乎相同:
编辑3:
当使用vscode调试Nodejs时,这是一个已知的“bug”。
正如其解释here,这是由于Promise的节点实现与vscode中的错误处理程序之间的交付和期望之间的某种不匹配而发生的。
这可以通过关闭vscode中的所有错误处理来规避,但是将来可能会发生变化。
最终编辑:
我发布了一个new question,总结了我们对这个明显错误的了解。