ES6 入门教程
作者:阮一峰
文章目录
- ES6 入门教程
- 10 对象的扩展
- 10.7 AggregateError 错误对象
- 10.8 Error 对象的 cause 属性
10 对象的扩展
10.7 AggregateError 错误对象
ES2021 标准之中,为了配合新增的Promise.any()
方法,还引入一个新的错误对象AggregateError
,也放在这一章介绍。
AggregateError 在一个错误对象里面,封装了多个错误。如果某个单一操作,同时引发了多个错误,需要同时抛出这些错误,那么就可以抛出一个 AggregateError 错误对象,把各种错误都放在这个对象里面。
AggregateError 本身是一个构造函数,用来生成 AggregateError 实例对象。
AggregateError(errors[, message])
AggregateError()
构造函数可以接受两个参数。
- errors:数组,它的每个成员都是一个错误对象。该参数是必须的。
- message:字符串,表示 AggregateError 抛出时的提示信息。该参数是可选的。
const error = new AggregateError([
new Error('ERROR_11112'),
new TypeError('First name must be a string'),
new RangeError('Transaction value must be at least 1'),
new URIError('User profile link must be https'),
], 'Transaction cannot be processed')
上面示例中,AggregateError()
的第一个参数数组里面,一共有四个错误实例。第二个参数字符串则是这四个错误的一个整体的提示。
AggregateError
的实例对象有三个属性。
- name:错误名称,默认为“AggregateError”。
- message:错误的提示信息。
- errors:数组,每个成员都是一个错误对象。
下面是一个示例。
try {
throw new AggregateError([
new Error("some error"),
], 'Hello');
} catch (e) {
console.log(e instanceof AggregateError); // true
console.log(e.message); // "Hello"
console.log(e.name); // "AggregateError"
console.log(e.errors); // [ Error: "some error" ]
}
10.8 Error 对象的 cause 属性
Error 对象用来表示代码运行时的异常情况,但是从这个对象拿到的上下文信息,有时很难解读,也不够充分。
ES2022 为 Error 对象添加了一个cause
属性,可以在生成错误时,添加报错原因的描述。
它的用法是new Error()
生成 Error 实例时,给出一个描述对象,该对象可以设置cause
属性。
const actual = new Error('an error!', { cause: 'Error cause' });
actual.cause; // 'Error cause'
上面示例中,生成 Error 实例时,使用描述对象给出cause
属性,写入报错的原因。然后,就可以从实例对象上读取这个属性。
casue
属性可以放置任意内容,不必一定是字符串。
try {
maybeWorks();
} catch (err) {
throw new Error('maybeWorks failed!', { cause: err });
}
上面示例中,cause
属性放置的就是一个对象。