【问题标题】:How to properly throw an error in Vue.js?如何在 Vue.js 中正确抛出错误?
【发布时间】:2017-10-18 01:38:30
【问题描述】:

我正在构建一个 SVG 组件,它采用不带扩展名的文件名。如果使用扩展,我想强制执行此操作并引发错误。

因为我有一个 ES6 编译器,所以我只是使用这个:

if (this.name.includes('.svg')) {
    throw 'Do not use the svg extension';
}

这是在 Vue.js 中引发错误的正确方法还是有更好的方法?目前,当我实施并测试它时,我收到了 2 个警告。

我收到一个带有堆栈跟踪的 [Vue 警告] 和我自己的错误。最好我只想在控制台中抛出一个简单的错误消息来表示用户做错了什么。

对这种方法有什么想法或提示可以在 Vue.js 或一般的 javscript 中更好地处理这个问题?

【问题讨论】:

  • 我认为这是一种正确的方法,您得到的 [vue warn] 只是更具体地说明了您在错误起源时抛出的错误,包括您的组件名称。

标签: javascript vue.js vuejs2 vue-component


【解决方案1】:

你应该使用标准的 TypeError:

创建一个实例,表示当变量或参数不是有效类型时发生的错误。

throw new TypeError("Do not use the svg extension", filename)

TypeError-MDN

【讨论】:

  • 他不是在问如何抛出错误。您刚刚提供了 typerror 的文档链接。他知道如何抛出错误并且他正在这样做,他在问为什么他会收到 vue 警告
  • @user7814783 我想他也在问更好的方法来抛出这种错误。
  • 两者兼而有之,我只想要确认和可能的解决方案或回答为什么第二个错误也会显示。我想我会更新到 TypeError 并暂时留下双重错误消息as is
【解决方案2】:

当 Error 像函数一样使用时——没有 new,它将返回一个 Error 对象。因此,仅调用 Error 将产生与通过 new 关键字构造 Error 对象相同的输出。

throw new Error('Error text.');

除了通用的 Error 构造函数之外,JavaScript 中还有其他七个核心错误构造函数。对于客户端异常,请参阅异常处理语句。

评估错误 创建一个实例,表示与全局函数 eval() 相关的错误。

内部错误 创建一个实例,该实例表示在引发 JavaScript 引擎中的内部错误时发生的错误。例如。 “递归过多”。

范围错误 创建一个实例,该实例表示当数值变量或参数超出其有效范围时发生的错误。 参考错误 创建一个实例,表示取消引用无效引用时发生的错误。

语法错误 创建一个实例,表示在 eval() 中解析代码时发生的语法错误。

类型错误 创建一个实例,表示当变量或参数不是有效类型时发生的错误。

URIError 创建一个实例,表示在 encodeURI() 或 decodeURI() 传递无效参数时发生的错误。

【讨论】:

  • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
猜你喜欢
  • 2019-01-03
  • 2018-09-24
  • 2020-08-29
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 2013-11-23
  • 1970-01-01
相关资源
最近更新 更多