在 ES11 中使用 Promise.allSettled 解决异步问题

阅读时长 4 分钟读完

在前端开发过程中,处理异步问题一直是一个棘手的难题。以往我们通常使用 Promise.all 来解决异步问题,但是这种方式只要有一个 Promise reject,就会导致整个异步操作失败。ES11 中引入了 Promise.allSettled 方法,可以完整地处理每一个 Promise 的状态,从而更加灵活地处理异步问题。

Promise.allSettled 的基本用法

Promise.allSettled 方法接受一个 Promise 数组作为参数,会返回一个新的 Promise 对象,该对象将在所有给定的 Promise 都已经完成或被拒绝后解决,并返回一个对象数组,每个对象都表示一个 Promise 的结果。对象数组中包含每个 Promise 的状态、状态对应的参数和返回值。

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

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

从上面的代码可以看出,Promise.allSettled 方法会完整地处理每一个 Promise 的状态,不管它是成功还是失败,都会返回一个对象数组,并且每个对象都包含这个 Promise 的状态、状态对应的参数和返回值。

Promise.allSettled 的实际应用场景

Promise.allSettled 方法在实际应用场景中非常有用。比如,我们要查询多个用户信息,但是有可能某个用户不存在,此时 Promise.all 方法会直接 reject 并停止后续执行,而 Promise.allSettled 可以返回所有用户的状态和信息,方便我们统一处理结果。

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

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

从上面的代码可以看出,Promise.allSettled 方法可以完整地处理每一个 Promise 的状态,对于返回状态为 fulfilled 的 Promise 结果,我们可以对其进行过滤和映射,获取我们需要的信息。

总结

Promise.allSettled 方法在处理异步问题中非常有用,可以完整地处理每一个 Promise 的状态,提供更加灵活和丰富的异步处理方式。要注意的是,Promise.allSettled 方法在低版本浏览器中不支持,需要使用 polyfill 或者手动实现。

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

纠错
反馈