ES11 全新的 Promise APIs: 中断错误投递

阅读时长 5 分钟读完

引言

在前端开发中,处理异步代码是无法避免的过程,Promise 是一个常见的异步处理方式。但是在使用 Promise 的过程中,有时会遇到错误处理的问题。在 ES11 中,有全新的 Promise APIs 可以解决这个问题,那就是中断错误投递。

什么是中断错误投递?

中断错误投递是指在链式调用中,如果有错误发生,Promise 将停止向下传递错误,直到被试图 catch 这个错误或者调用新的 then 函数。在处理链式调用的过程中,这种特性非常有用。

以往我们会看到类似以下的代码:

-- -------------------- ---- -------
--------------
-------- -- -
    ------ -----------------
--
-------- -- -
    --------------
--
------------ -- -
    -------------------
---

假设 anotherPromise 函数返回一个 reject 的 Promise,这时错误就会向下传递到 console.error(err)。如果错误的处理方式不是在这个位置处理,我们需要增加一些函数或者 try/catch 块到调用链中来处理这个错误。

在 ES11 中,我们可以使用 AggregateError 类型来解决这种情况。

-- -------------------- ---- -------
--------------
-------- -- -
    ------ ---------------------------- -- - 
        ----- --- --------------------- ------ --- -- --------
    ---
--
-------- -- -
    --------------
--
---------------------- ----- -- -
    ---------------------------
    --- ------ - -- ----------- -
        ------------------ --------- ----- ----------- ---
    -
---

在这个例子中,我们向 anotherPromise 添加了一个 catch 调用并且将错误使用 AggregateError 包装起来。这就会导致 Promise 链停止在这里,直到新的 catch 调用,这里就是全新的 catch 函数,它可以为我们提供更多处理错误的灵活性。

深入学习:了解 AggregateError 类型

在 ES11 中,我们可以使用 AggregateError 类型来创建一个 Promise 的错误对象。这个对象包含一个错误的列表,可以使用 errors 属性来访问,并且可以添加一个可选的错误消息作为第二个参数来区分不同的 Promise 链。

在下面的例子中,我们使用 AggregateError 包装两个 Promise 链中的错误,以便我们更好地处理它们。

-- -------------------- ---- -------
----- -------- ------------------ -
    --- -
        ----- - - ------------------ ----------------
        ----- - - ------------------ --------- -------
        ----- ------- - ----- ---------------------- ----
        ----- ------ - ----------------- ------ -- -- ------ --- ------------------ ------ -- -- --------
        -- -------------- - -- -
            ----- --- ---------------------- ----- ------ ------------
        -
    - ----- --- -
        ----------------------- -- ----- ------ ----------
        ---------------------- -- ------- ------ ------ -- ----
    -
-

------------------------------ -- ------------------

在这个例子中,我们首先创建了两个被 reject 的 Promise,然后使用 Promise.allSettled 来处理它们,并将结果筛选出 reject 的 Promise 并组成一个错误列表。如果有一个或多个错误,我们就抛出一个 AggregateError 类型的错误,并传递一个描述性的字符串作为它的第二个参数,以此来描述错误的类型。

指导意义

AggregateError 类型的出现使得在链式调用中处理错误变得更加容易。它的使用可以减少在调用链中添加额外错误处理函数的次数,并简化调用链的结构。同时,使用它也会给开发人员带来更多的灵活性和可读性。

结论

在 ES11 中,我们得到了更好的 Promise 错误处理的方法,即中断错误投递。这个特性的使用让我们在处理错误时更加方便和重构代码更加容易。用 AggregateError 类型可以更加灵活地处理错误,并让代码更加清晰明了。在实际的开发中,我们应该尽可能多地使用这个特性来提升我们的代码质量。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66ef81676fbf9601972f90e5

纠错
反馈