在JavaScript承诺中捕获特定类型的异常?

时间:2019-06-17 17:32:28

标签: javascript error-handling promise

我正在使用node-instagram api(javascript)。有时,每当我使用api发出get请求时,都会出错。我想在引发ECONNRESET异常时显示特定的错误消息,然后为所有其他类型的异常显示一般错误消息。到目前为止,我的代码如下:

instagram.get('users/self/media/recent').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
});

如何更改承诺以使其也识别ECONNRESET异常并在捕获异常时显示不同的错误消息?

2 个答案:

答案 0 :(得分:1)

我会在您的catch块中执行Object.keys(err),以查看错误对象提供的键。这些键之一应该具有带有详细信息的值,以标识错误的类型。

例如:

console.log(Object.keys(err)) ----> ['type','status','description']

if(err.type === 'ECONNRESET' && err.status === {code identifying it}){
   // do something
}

答案 1 :(得分:1)

如果您在console.log(err)上放置一个断点,然后在碰到断点时检查err对象,那么您应该能够知道err对象上的哪个属性告诉您它是ECONNRESETTrincot says it's code。然后只需使用if

instagram.get('users/self/media/recent').then(data => {
    console.log(data)
}).catch(err => {
    if (err.code === "ECONNRESET") {
        throw new Error("Specific error message");
    } else {
        throw new Error("Generic error message");
    }
});

在该代码中,我重新抛出错误,因此承诺被拒绝,假设您要将此链的结果返回到将利用其拒绝原因的某种东西。如果您只是在该catch处理程序中执行消息,则:

instagram.get('users/self/media/recent').then(data => {
    console.log(data)
}).catch(err => {
    if (err.code === "ECONNRESET") {
        // Show the specific error message
    } else {
        // Show the generic error message
    }
});