Promise.allSettled 的使用及其在 ES10 中的优化

阅读时长 4 分钟读完

Promise.allSettled 是 ES2020 中新增的 Promise 方法之一,它可以并行执行多个 Promise 实例,并在所有 Promise 实例都 settled(fulfilled 或 rejected)后返回一个数组,数组中包含每个 Promise 实例的状态和结果。

Promise.allSettled 的使用

Promise.allSettled 的语法如下:

其中,iterable 是一个可迭代对象,例如数组或类数组对象。Promise.allSettled 返回一个 Promise 实例,当 iterable 中所有 Promise 实例都 settled 后,它将被 fulfilled,返回的结果是一个数组,数组中包含每个 Promise 实例的状态和结果。

下面是一个使用 Promise.allSettled 的例子:

上面的代码中,promises 数组包含三个 Promise 实例,其中两个是 resolved,一个是 rejected。Promise.allSettled 返回的结果是一个数组,数组的长度等于 promises 数组的长度,每个元素是一个对象,对象包含两个属性:status 和 value 或 reason。status 的值为字符串 fulfilled 或 rejected,value 或 reason 分别表示 Promise 实例 settled 后的值或原因。

输出的结果如下:

Promise.allSettled 的优化

在 ES10 中,Promise.allSettled 的返回值可以通过 Object.fromEntries 方法转换为以 Promise 实例索引为键,状态和结果为值的对象。Object.fromEntries 是 ES2019 中新增的方法,它可以将一个二维数组转换为一个对象。

下面是一个使用 Object.fromEntries 的例子:

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

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

上面的代码中,使用了 results.map 方法将 results 数组转换为一个二维数组,二维数组中每个元素是一个包含 Promise 实例索引、状态和结果的数组。然后使用 Object.fromEntries 方法将二维数组转换为一个对象,对象的键是 Promise 实例索引,值是一个包含状态和结果的对象。

输出的结果如下:

使用 Object.fromEntries 可以使 Promise.allSettled 返回的结果更易于处理和访问。

总结

Promise.allSettled 是一个非常实用的 Promise 方法,它可以并行执行多个 Promise 实例,并在所有 Promise 实例都 settled 后返回一个数组,数组中包含每个 Promise 实例的状态和结果。在 ES10 中,Promise.allSettled 的返回值可以通过 Object.fromEntries 方法转换为以 Promise 实例索引为键,状态和结果为值的对象,这使得 Promise.allSettled 的返回值更易于处理和访问。

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

纠错
反馈