javascript - 在 JavaScript 中抛出多个异常

标签 javascript exception error-handling exception-handling

我想知道是否有一种方法可以抛出多个错误并在 JavaScript 中捕获所有错误。

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

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

throw "you are missing field: " xxxxxx

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

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

有什么想法吗?

谢谢。

最佳答案

您创建自己的 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:

const missingFields = [];

fields.forEach((field) => {
  try {
    const value = field.getValue();
    // Process the field's value.

    // Could be just field.validate();
  } catch (e) {
    missingFields.push(field.getName());
  }
});

if (missingFields.length > 0) {
  throw new MissingFieldsError(
      missingFields, 'Some required fields are missing.');
}

关于javascript - 在 JavaScript 中抛出多个异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29028813/

相关文章:

javascript - 什么是正则表达式匹配标题 : [name]?

javascript - 如何确定 ajaxError 正在处理哪种错误?

debugging - Win32/C++ 的关闭异常处理

c++ - 在 C++ 中捕获默认异常

javascript - 如何检测图像路径是否损坏?

php - Javascript 的 Date.UTC 命令的 PHP 等价物是什么?

javascript - 未捕获的类型错误 : Cannot read property 'props' of null in react with google-maps

shell - wget错误会破坏shell脚本-如何防止这种情况?

cakephp - 如何在不使用cakephp3中的验证的情况下将错误消息注入(inject)实体?

javascript - 我需要在 JavaScript 中的 `return` 之后添加 `throw` 吗?