Promise 中的 race 方法和 allSettled 方法的使用方法

阅读时长 4 分钟读完

在日常的前端开发中,经常需要处理异步操作,为了更好地管理和控制异步操作,ES6 中引入了 Promise 对象。在 Promise 对象中,除了常用的 then 方法和 catch 方法之外,还有两个常用的方法,分别是 race 和 allSettled。

1. Promise.race

Promise.race 方法接受一个 Promise 对象数组作为参数,返回一个新的 Promise 对象。返回的 Promise 对象在数组中的所有 Promise 对象中,只要有一个 Promise 对象状态发生改变,就会返回该 Promise 对象所产生的结果(无论是成功还是失败)。

示例代码:

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

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

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

在上面的示例中,p1 和 p2 都是 Promise 对象,通过 Promise.race 方法传入一个包含 p1 和 p2 的数组。因为 p1 的状态先成功,所以 then 方法会返回 p1 的结果。如果 p1 状态先是失败,那么 catch 方法会返回 p1 的失败原因。

2. Promise.allSettled

Promise.allSettled 方法接受一个 Promise 对象数组作为参数,返回一个新的 Promise 对象。返回的 Promise 对象有两种可能的状态,要么是 fulfilled,表示数组中所有 Promise 对象已经变为“settled”状态,要么是 rejected,表示数组中至少有一个 Promise 对象状态为“rejected”。

该方法返回的结果是一个数组,其中包含了所有 Promise 对象的状态和结果(不区分成功还是失败)。如果 Promise 对象在执行过程中发生了异常,返回的结果中也会包含该异常信息。

示例代码:

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

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

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

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

在上面的示例中,p1 和 p3 的状态都是成功,但是 p2 的状态是失败。由于 Promise.allSettled 方法会等待所有 Promise 对象执行完毕后才返回结果,所以最终返回的结果中,p2 的状态也被包含在了结果中。

3. 总结

通过上面的两个示例,我们可以看出,Promise 对象中的 race 方法和 allSettled 方法常常用于多个 Promise 对象同时执行的场景中,可以帮助我们更好地管理和控制异步操作。race 方法可以用于多个 Promise 对象之间的竞争,返回最先执行完毕的 Promise 对象的结果;allSettled 方法则可以用于多个 Promise 对象同时执行,返回所有 Promise 对象的执行结果。在实际的开发中,我们可以根据具体的业务场景来选择合适的方法来处理异步操作。

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

纠错
反馈