ECMAScript 2021 中的 Promise.allSettled:如何并行处理多个 Promise

· 约 4 分钟读完

ECMAScript 2021 中的 Promise.allSettled:如何并行处理多个 Promise

在前端开发中,处理异步任务是十分常见的。Promise 是 JavaScript 中一种优秀的异步编程解决方案,它让我们能够更容易地处理回调地狱的问题。而在 ECMAScript 2021 中,新增加了一个全新的 Promise 方法:Promise.allSettled。在本文中,我们将会详细地介绍如何使用 Promise.allSettled 并行处理多个 Promise。

什么是 Promise.allSettled?

Promise.allSettled 是 ECMAScript 2021 中新增加的一个 Promise 方法。用于并行处理多个 Promise,并在所有 Promise 完成后返回一个包含所有 Promise 结果的数组。不同于 Promise.all,Promise.allSettled 不会在遇到拒绝的 Promise 时立即抛出错误。这意味着,在所有 Promise 应用都完成时,返回的数组中会包含对每个 Promise 调用结果的一份记录,无论是完整的值还是拒绝原因。

如何使用 Promise.allSettled

使用 Promise.allSettled 非常简单,只需要在数组内传入需要执行的 Promise 对象,例如:

在这个例子中,我们创建了三个 Promise,其中第二个 Promise 是被拒绝的。然后我们将这三个 Promise 对象传递给 Promise.allSettled 方法中。当所有 Promise 对象执行完毕后,then() 方法中的回调函数将会被调用。

在then()方法中,我们获取了一个参数 result。result 是一个数组,包含了所有的 Promise 执行结果。对于每个 Promise 的执行结果,result 数组中都包含一个对象,该对象具有以下两个属性:

  • status:可以是 fulfilled 或 rejected
  • value 或 reason:表示 Promise 返回的值或者被拒绝的原因

在我们的例子中,result 数组如下所示:

我们可以看到,result 数组中的每个对象都表示了一个 Promise 的执行结果。它的 status 属性表示 Promise 的执行状态,value 或 reason 属性表示 Promise 的返回值或是被拒绝的原因。

使用 Promise.allSettled 的好处

与 Promise.all 相比,Promise.allSettled 更容易处理拒绝的 Promise 对象。在 Promise.all 中,当遇到一个 Promise 被拒绝时,Promise.all 会立即抛出异常,并中止其他 Promise 的执行。而 Promise.allSettled 会等待所有 Promise 执行完毕才会返回结果,同时包含了所有 Promise 的执行结果。这个特点让我们更容易地处理 Promise 执行中的错误。

另外,Promise.all 只要有一个 Promise 被拒绝,返回结果就是拒绝状态。而 Promise.allSettled 会保留所有 Promise 的执行结果,并返回一个数组,让我们可以更容易地了解每个 Promise 的执行结果。

结语

Promise.allSettled 是 ECMAScript 2021 中新加的一个 Promise 方法。它可以更容易地处理多个 Promise 对象的并行执行,并且返回一个包含所有 Promise 结果的数组。在处理多个异步任务时,使用 Promise.allSettled 可以更方便地处理错误,并了解每个 Promise 的执行结果。

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