我看到的错误与此相同(来自此处:Catch Error Type in Bluebird Not Working):
I have a custom error class: class NetworkError extends Error { constructor() { super('Network Error'); this.name = 'NetworkError'; } }
我想特别处理它:
import {NetworkError} from '../../common/errors'; someFunc().catch(NetworkError, err => { // this is missed }).catch(err => { // this is hit });
但它正在跳过我的自定义捕获并击中一般捕获。如果我 改变它,它的工作原理:
someFunc().catch({name: 'NetworkError'}, err => { // this is hit }).catch(err => { // this is missed });
显然第一种方式是首选。我在这里缺少什么?
答案 0 :(得分:2)
原因是对Typescript 2.0的最新升级。 具体做法是:
将a的值替换为a返回的值的一部分 超级(...)调用,子类化错误,数组和其他可能不再 按预期工作。这是因为构造函数的功能 对于Error,Array等使用ECMAScript 6的new.target进行调整 原型链;但是,没有办法确保价值 在ECMAScript 5中调用构造函数时的new.target。其他 低级编译器默认情况下通常具有相同的限制。
此解决方法为我解决了问题,但不适用于IE 10和之前的: 任何超级调用后添加以下代码。
if (Object.setPrototypeOf) {
Object.setPrototypeOf(this, XHRError.prototype);
} else {
this.__proto__ = XHRError.prototype;
}