• ES6 入门教程 10 对象的扩展 10.7 AggregateError 错误对象 & 10.8 Error 对象的 cause 属性


    ES6 入门教程

    ECMAScript 6 入门

    作者:阮一峰

    本文仅用于学习记录,不存在任何商业用途,如侵删

    10 对象的扩展

    10.7 AggregateError 错误对象

    ES2021 标准之中,为了配合新增的Promise.any()方法,还引入一个新的错误对象AggregateError,也放在这一章介绍。

    AggregateError 在一个错误对象里面,封装了多个错误。如果某个单一操作,同时引发了多个错误,需要同时抛出这些错误,那么就可以抛出一个 AggregateError 错误对象,把各种错误都放在这个对象里面。

    AggregateError 本身是一个构造函数,用来生成 AggregateError 实例对象。

    AggregateError(errors[, message])
    
    • 1

    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')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    上面示例中,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" ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    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'
    
    • 1
    • 2

    在这里插入图片描述

    上面示例中,生成 Error 实例时,使用描述对象给出cause属性,写入报错的原因。然后,就可以从实例对象上读取这个属性。

    casue属性可以放置任意内容,不必一定是字符串。

    try {
      maybeWorks();
    } catch (err) {
      throw new Error('maybeWorks failed!', { cause: err });
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上面示例中,cause属性放置的就是一个对象。

  • 相关阅读:
    抖音矩阵系统-60+自媒体平台一键发布-短视频获客系统
    神经网络层次分析模型,神经网络层次分析方法
    【Linux】线程安全-生产者消费者模型
    SSM+Vue+Element-UI实现医院设备管理系统
    【论文笔记】policy-space response oracles (PSRO)
    【算法基础】(一)基础算法 --- 快速排序
    React组件、React脚手架、组件的props属性
    Grafana-web使用说明
    缓存篇—缓存击穿
    如何减少软件设计和实现之间鸿沟
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/127915082