2016-08-12 150 views
0

我有一个自定义错误类:捕捉错误类型

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

你的第一个变体将仅捕获错误,如果它已经是一个'NetworkError'类型错误的对象。 'someFunc()'抛出那个特定的错误吗? – jfriend00

+0

第二个变体可能适用,因为您正在传入一个通用对象,并且抛出的错误是通用对象的派生。在我们可以提供更多帮助之前,您需要显示someFunc()抛出的错误。 – jfriend00

+0

要测试这一点,请停止调试器,并查看错误的对象类型是什么! :) –

回答