ES2020 中 Promise.allSettled 详解

在 ES2020 中,Promise.allSettled 是一个新增的方法,它的作用是在所有的 Promise 实例都完成后返回一个状态,表示每个 Promise 实例的结果,而不管其中是否有 Promise 抛出异常。

语法和返回值

Promise.allSettled 方法的语法如下:

其中,promises 是一个由 Promise 实例组成的数组。

当所有 Promise 实例都settled,即成功或失败时,Promise.allSettled 的返回值是一个新的 Promise 实例,并且这个 Promise 实例的状态是 fulfilled。

返回值的状态和值

Promise.allSettled 返回的 Promise 实例的状态有以下两种可能:

  1. 所有 Promise 实例都成功,Promise.allSettled 返回的 Promise 实例状态为 fulfilled。

  2. 有 Promise 实例抛出异常,Promise.allSettled 返回的 Promise 实例状态为 fulfilled。

返回值的值是一个由所有 Promise 实例状态的结果组成的数组,数组中的每个元素都是一个对象,它有两个属性:status 和 value。

当 Promise.allSettled 返回的 Promise 实例状态为 fulfilled 时,各 Promise 实例状态的结果如下:

  • 如果 Promise 实例成功,那么 status 属性的值为 "fulfilled",value 属性的值是成功的返回值。
  • 如果 Promise 实例失败,那么 status 属性的值为 "rejected",value 属性的值是失败的原因。

使用示例

以上代码中,我们定义了三个 Promise 实例:p1 成功并返回值为 1,p2 失败并抛出异常,p3 是一个异步操作,在 1 秒后返回结果 3。我们将这三个 Promise 实例放入 Promise.allSettled 中,并打印结果。

结果如下:

从结果可以看出,虽然 Promise.allSettled 的参数中包含了一个抛出异常的 Promise 实例,但最终 Promise.allSettled 返回的 Promise 实例状态依然为 fulfilled,并且返回了包括这个异常 Promise 实例在内的所有 Promise 实例的状态结果。

总结

Promise.allSettled 是一个非常实用的方法,它能够返回所有 Promise 实例执行后的状态和值,不管其中是否有异常抛出。这个方法的引入让我们在开发中能够更方便地处理多个 Promise 实例的状态,并取得它们的值,帮助我们更好地实现异步操作。

对于那些使用 Promise 实现异步操作的前端开发人员来说,掌握 Promise.allSettled 方法不仅能够提高代码的效率,还可以帮助他们更好地理解异步编程的实现过程。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65347aa47d4982a6eb90a880


纠错
反馈