要在 js 的 new Error 里传递出错信息,只能传递字符串吗?

我在一个 promise 返回 reject 的时候,原本是直接返回一个普通对象:

return Promise.reject({
  status: response.status,
  statusText: response.statusText
})

但后来发现 ESlint 推荐将 reject 返回值包含在 Error 里(eslint(prefer-promise-reject-errors)),于是加上了 Error:

return Promise.reject(new Error({
  status: response.status,
  statusText: response.statusText
}))

问题来了,原本可以在 catch 里分析返回的 status,现在作为 Error 对象的 message 打印出来是 "[object Object]",这怎么分析呢?难道只能传递个字符串,然后下游代码也跟着修改?求教

阅读 10.5k
3 个回答

这样不就行了

Promise.reject(`${response.status}-${response.statusText}`)
catch(err){
    const [status, statusText] = err.split('-')
    // todo
}

这种问题,一定要学会先查文档,查不出来再提问。

参考 MDN Error,Error 的构造函数里 message 只能是字符串,你传什么都会转成字符串。另外 Promise.reject() 就会返回 rejected 的 Promise 实例,不需要在里面再传一个 Error。

新手上路,请多包涵

在你的eslint中加上:'prefer-promise-reject-errors': 'off'
就可以关闭这个检查

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题