在前端开发中,我们经常会遇到各种异常错误,这不仅影响了我们的开发效率,还会带来用户体验上的不满。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 的一些实用技巧
- 通过 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 能够输出并遍历其中的异常信息。
- 使用 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);
输出结果为:
[ TypeError: Error 1, EvalError: Error 2 ]
通过 Array.from 将 AggregateError 对象转化成数组之后,就可以使用数组的一些方法进行查找和操作。
总结
AggregateError 是一个非常实用的异常报告工具,解决了在处理多个异常时的问题。通过对 AggregateError 的深入了解,我们可以更高效地处理异常信息,提高我们的开发效率。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659e3623add4f0e0ff74159f