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

在javascript承诺中捕获特定类型的异常?,javascript,error-handling,promise,Javascript,Error Handling,Promise,我正在使用节点instagram api(javascript)。有时,每当我使用api发出get请求时,都会出现错误。我想在引发ECONNRESET异常时显示特定的错误消息,然后为所有其他类型的异常显示一般错误消息。到目前为止,我的代码如下所示: instagram.get('users/self/media/recent').then(data => { console.log(data) }).catch(err => { console.log(err) })

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

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

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

我会在catch块中执行
Object.keys(err)
,以查看错误对象提供的键。其中一个键的值应包含详细信息,以识别错误类型

例如:

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

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

如果在
控制台.log(err)
上放置断点,然后在命中断点时检查
err
对象,则应该能够知道
err
对象上的哪个属性告诉您它是
ECONNRESET
。如果,则只需使用

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
    }
});

我认为最好的做法是返回
承诺。拒绝(错误)
而不是抛出then或catch,不是吗?我知道这两种方法都有效,我只是觉得我在某个地方听说你不应该在promise处理程序中使用它?@IceMetalPunk-不,这两种方法都很好,因为记录在案,@trincot是对的:属性是
code
。谢谢大家!