首页 > 解决方案 > 我可以使用'throw {}'并且堆栈跟踪是正确的吗?

问题描述

我尝试了以下两种方式

new Promise((resolve, reject) => {
    reject()
  })
  .catch(() => {
    throw {
      name: 'a',
      message: 'b'
    }
  })

new Promise((resolve, reject) => {
    reject()
  })
  .catch(() => {
    throw new Error({
      name: 'a',
      message: 'b'
    });
  })

在此处输入图像描述

' throw {}'有问题,是堆栈跟踪不对

“”的堆栈跟踪throw new Error()是正确的,但不能将消息作为 json 抛出

我可以使用' throw {}'并且堆栈跟踪是正确的吗?

标签: javascriptpromise

解决方案


stack属性仅存在于Error对象上。构造函数的第一个参数Error是一个字符串,所以如果你将一个对象传递给它,它将被字符串化。你可以做

  throw Object.assign(new Error("message"), {
     // properties
   });

抛出具有自定义属性的错误对象。


推荐阅读