浅析 ES11 的 AggregateError—— 一个更精确的异常报告工具

在前端开发中,我们经常会遇到各种异常错误,这不仅影响了我们的开发效率,还会带来用户体验上的不满。ES10 中已经引入了 Error.stackTraceLimit 属性,可以帮助我们定位异常,但这并不足够。在 ES11 中,新增了一个非常实用的工具——AggregateError,可以更加精确地报告异常,帮助我们快速定位问题。

什么是 AggregateError?

AggregateError 是 ES11 中新增的一个全局异常类型,继承自 Error 类型。这种异常类型可以将多个异常对象作为其实例化参数进行传递,以表示多个异常的集合。

AggregateError 可以用来处理多个 Promise 异常,将多个异常信息聚合在一起,一起传递给 catch 方法,使我们能够更方便地识别和处理多个异常。

AggregateError 的语法

AggregateError 的构造函数语法如下:

new AggregateError(errors, message);

其中:

  • errors:一个可迭代对象,里面包含多个 Error 实例。
  • message:可选参数,表示异常信息的总体描述。

AggregateError 的示例

下面是一个通过 AggregateError 处理的多个异常案例:

Promise.all([
  Promise.resolve(1).then(() => {
    throw new Error('Error 1');
  }),
  Promise.reject(new Error('Error 2')),
])
  .catch((err) => {
    console.error(err); // AggregateError: Multiple errors occurred: Error 1, Error 2
  });

代码中我们通过 Promise.all 并发执行两个 Promise 对象,其中一个 Promise 的 then 方法中抛出了一个异常,另一个 Promise 直接 reject 了一个异常。由于这两个异常发生在不同的 Promise 中,如果我们想匹配和处理这两个异常就会很麻烦。这时候,我们就可以使用 AggregateError,将这两个异常对象放在一起进行处理。

AggregateError 的一些实用技巧

  1. 通过 for...of 实现遍历

AggregateError 中可以通过 for...of 循环遍历其中的异常对象,并输出其中的信息,如下所示:

const errorList = [
  new TypeError('Error 1'),
  new EvalError('Error 2'),
];

const aggError = new AggregateError(errorList, 'Multiple errors occurred');
for (const err of aggError) {
  console.error(err.message); // Error 1 Error 2
}

在这里,我们将多个异常存储在一个数组 errorList 中,并将其作为 AggregateError 的参数进行实例化。然后通过 for...of 能够输出并遍历其中的异常信息。

  1. 使用 Array.from 转换为数组

AggregateError 可以使用 Array.from 转换为数组,方便在多个异常信息中查找和操作。例子如下:

const aggError = new AggregateError([
  new TypeError('Error 1'),
  new EvalError('Error 2'),
], 'Multiple errors occurred');

const errorArray = Array.from(aggError);
console.error(errorArray);

输出结果为:

通过 Array.from 将 AggregateError 对象转化成数组之后,就可以使用数组的一些方法进行查找和操作。

总结

AggregateError 是一个非常实用的异常报告工具,解决了在处理多个异常时的问题。通过对 AggregateError 的深入了解,我们可以更高效地处理异常信息,提高我们的开发效率。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659e3623add4f0e0ff74159f


纠错反馈