引言
在前端开发中,处理异步代码是无法避免的过程,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