我正在使用ECMAScript 6
,NodeJS 8.12
和Bluebird 3.5.2
。
我已经定义了一个自定义错误类:
class CustomError extends Error {
constructor(message, someParameter) {
super(message);
this.name = 'CustomError';
this.someParameter = someParameter;
}
}
我的诺言链看起来像这样:
doSomething()
.catch(CustomError, error => { ... })
.then(result => { ... })
.catch(error => { LOGGER.error(`something went terribly wrong: ${error}`); }
在doSomething()
中使用CustomError拒绝后,如下所示:
new CustomError(error.message, parameterValue)
,错误消息是:
something went terribly wrong: TypeError: Class constructor CustomError cannot be invoked without 'new'
我将其精确定位到catch(CustomError, error =>
语句,为了不与TypeError
崩溃,需要使用catch(new CustomError, error =>
。
即使在此之后,CustomError
捕获也不会执行。
我的问题是,为什么会这样?
是Bluebird的限制吗?
最后,我见过this question,但不适用于我的情况,因为我没有使用Babel,也没有this question,这表明我的方法应该可行(答案为ES6情况) )。