如何从catch方法中的新Error(data)访问数据?

时间:2018-11-16 15:10:36

标签: javascript promise

这是我的承诺:

.then(function(response) {
    if (response.type === 'error') {
        console.log("will throw error", response);
        throw Error(response);
    }
    return extractResponseCallback(response);
})
.catch(function(error) {
    console.log("catching error", error);
    return error;
});

console.log之前执行的throw Error(response);显示了以下信息:

will throw error 
{ 
  cmd: 'has_active_project',
  errorcode: 'Invalid command',
  type: 'error' 
}

但是catch方法中的console.log("catching error", error)显示了

catching error Error: [object Object]
    at /....js:18:19
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)

此外,使用console.log(JSON.stringify(“ catching error”,error))仅显示:

catching error {}
  • 如何访问传递给新错误的数据?
  • 我该如何解决?

2 个答案:

答案 0 :(得分:2)

我相信您正在搜索console.dir(),它显示了传递对象的所有属性,并且您看到具有交互属性和值的普通对象,而不是无用的[object Object]输出。

来自文档:

  

显示指定属性的交互式列表   JavaScript对象。输出显示为分层列表   带有显示三角形的显示三角形,可让您看到孩子的内容   对象。

     

换句话说,console.dir是查看服务器所有属性的方法。   控制台中指定的JavaScript对象,开发人员可以通过该对象   轻松获取对象的属性。

如果您确实需要记录所有这些信息,请按照这种方式进行。请注意,当您要查看错误对象的特定字段时,可以像error.message一样登录,对于大多数情况就足够了。

答案 1 :(得分:1)

Error构造函数的参数为​​string,并在结果错误对象上产生message属性。如果您知道自定义错误将是一个对象,则可以尝试以下操作:

throw new Error(JSON.stringify(response))

然后您可以使用

在捕获处理程序中访问该消息
error.message

甚至

JSON.parse(error.message)

如果出于某种原因需要与各个属性进行交互。