在JavaScript中抛出多个异常

时间:2015-03-13 09:31:03

标签: javascript exception error-handling exception-handling

我想知道是否有办法抛出多个错误并在JavaScript中捕获所有错误。

我正在寻找特定的字段,当我找到一个丢失的字段时,我想抛出一个错误。

问题是,如果我抛出一个错误,例如:

throw "you are missing field: " xxxxxx

我没有告诉用户他/她缺少的所有其他字段。

我也不想将所有内容组合成一个字符串,因为错误消息可能太长了。

有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:0)

你可以抛出任何类型的对象,你不仅限于字符串,所以你也可以将你的错误消息收集到一个对象中,如果出现任何错误,最后抛出它。

答案 1 :(得分:0)

您创建自己的select conversation_id from ( select conversation_id, count(*) as count, t1.user_id as user_1, t2.user_id as user_2 from table t1 join table t2 on (t1.conversation_id = t2.conversation_id and t1.user_id != t2.user_id) where t1.user_id = 1000001 and t2.user_id = 1000002 ) as inner_table where inner_table.count = 2 类型,其中包含缺少字段的列表:

Error

要使用它,您可以首先收集所有缺少的字段,然后抛出class MissingFieldsError extends Error { constructor(fields, ...params) { super(...params); this.fields_ = fields; } getMissingFields() { return this.fields_; } } 的实例。 假设您有某种类型的MissingFieldsError实例数组,代码应如下所示:

Field

如果您愿意,您甚至可以分别抛出const missingFields = fields .filter((field) => field.isMissing()) .map((field) => field.getName()); if (missingFields.length > 0) { throw new MissingFieldsError( missingFields, 'Some required fields are missing.'); } ,收集它们,然后抛出Error

MissingFieldsError

答案 2 :(得分:0)

嘿,目前正在处理与此相关的问题。只是想添加一些想法。

throw允许您抛出任何表达式,并且会生成一个异常,如果该异常存在且填充了值作为参数(通常为catch),它将引发Error子句。不过,这是用户定义的,因此您基本上可以抛出任何想要的东西。

因此,如果您真的想抛出一系列异常,则完全可以。即类似这样的

try {
  var errors = [];
  for (let i=0; i<10; i++) {
    errors.push(new Error('Here is a special exception'));
  }

  if (errors.length > 0) {
    throw errors; 
  }

} catch(e) {
    for (let i=0; i<e.length; i++) {
      console.log(e[i]);
    }
}

我认为有些事情要注意

  • 您的函数可以抛出不同的类型吗?如果可以抛出数组,数字,异常,任何其他表达式,则需要处理所有这些情况。通常,人们会将其移至他们自己的错误处理程序中,因此在这种情况下,您需要处理集合
  • 请注意nested try/catch语句。通常,您需要意识到这一点,但是为了理智起见,还是将它扔在那里(哈哈!)。
  • 在处理可能在不同时间将错误填充到数组中的异步代码时,请确保在进行操作之前使用awaitPromise.all(除非您不介意遗漏异常)。

就实践的好坏而言,我实在找不到太多。我会轻描淡写,并了解您的用例是否真的需要这个。有时候这很有用,但是您可能不需要处理整个异常数组。

希望这会有所帮助。