推荐答案
Promise.all()
- 作用: 接收一个 Promise 可迭代对象(通常是数组),并返回一个新的 Promise。
- 状态:
- 如果所有输入的 Promise 都成功 fulfilled,则返回的 Promise 也成功 fulfilled,其值是按输入顺序排列的 fulfilled 值的数组。
- 如果任何一个输入的 Promise rejected,则返回的 Promise 立即 rejected,并携带第一个 rejected 的原因。
- 用途: 适用于需要等待所有异步操作都完成后才能继续执行的情况。
Promise.race()
- 作用: 接收一个 Promise 可迭代对象,并返回一个新的 Promise。
- 状态:
- 返回的 Promise 的状态和值与第一个 settled (fulfilled 或 rejected) 的 Promise 相同。
- 用途: 适用于只需要一个异步操作完成就继续执行的情况,例如超时处理或竞速场景。
Promise.allSettled()
- 作用: 接收一个 Promise 可迭代对象,并返回一个新的 Promise。
- 状态:
- 返回的 Promise 在所有输入的 Promise 都 settled (fulfilled 或 rejected) 后才 settled。
- 返回的 Promise 的值是一个数组,其中每个元素都描述了对应 Promise 的状态和值(如果 fulfilled)或原因(如果 rejected)。
- 用途: 适用于需要等待所有异步操作完成,并了解所有操作结果(无论成功或失败)的情况。
Promise.any()
- 作用: 接收一个 Promise 可迭代对象,并返回一个新的 Promise。
- 状态:
- 如果任何一个输入的 Promise 成功 fulfilled,则返回的 Promise 也成功 fulfilled,其值是第一个 fulfilled 的值。
- 如果所有输入的 Promise 都 rejected,则返回的 Promise rejected,并携带
AggregateError错误对象,其中包含所有 rejected 的原因。
- 用途: 适用于只需要一个异步操作成功即可继续执行的情况,并且可以容忍所有失败,类似
Promise.race(),但只关心成功的结果。
本题详细解读
Promise.all() 的详细解读
Promise.all() 的核心在于**“全部成功才成功”** 的原则。它接收一个 Promise 数组,如果数组中所有 Promise 都成功完成 (fulfilled),则 Promise.all() 返回的 Promise 也会成功完成,并且结果值是一个包含所有输入 Promise 的结果值的数组,数组的顺序与输入的 Promise 顺序一致。如果数组中任意一个 Promise 失败 (rejected),则 Promise.all() 返回的 Promise 立即失败,并且失败的原因是第一个被拒绝的 Promise 的原因。
例子:
-- -------------------- ---- -------
----- -------- - -------------------
----- -------- - -------------------
----- -------- - -------------------
---------------------- --------- ----------
------------ -- -------------------- -- -- --- -- --
------------ -- ----------------------
----- -------- - -------------------
----- -------- - -------------------------
----- -------- - -------------------
---------------------- --------- ----------
------------ -- --------------------
------------ -- ---------------------- -- -- ------Promise.race() 的详细解读
Promise.race() 的核心在于**“竞速”** 的概念。它接收一个 Promise 数组,返回一个新的 Promise,该 Promise 的状态和值由第一个 settled (fulfilled 或 rejected) 的 Promise 决定。它不关心其他 Promise 的状态,一旦有一个 Promise 完成(成功或失败),立即返回结果。
例子:
-- -------------------- ---- -------
----- -------- - --- --------------- -- ------------------- ---- -------------
----- -------- - --- --------------- -- ------------------- --- -------------
----------------------- ----------
----------- -- ------------------- -- -- --------
------------ -- ----------------------
----- -------- - --- ----------------- ------- -- ------------------ --- -----------
----- -------- - --- --------------- -- ------------------- --- -------------
----------------------- ----------
----------- -- -------------------
------------ -- ---------------------- -- -- ------Promise.allSettled() 的详细解读
Promise.allSettled() 的核心在于**“收集所有结果”**,无论成功或失败。它接收一个 Promise 数组,返回一个新的 Promise,当所有 Promise 都 settled (fulfilled 或 rejected) 后,返回的 Promise 也会 settled。返回值是一个数组,包含每个 Promise 的状态 (status: "fulfilled" 或 "rejected") 和值 (如果 fulfilled) 或原因 (如果 rejected)。
例子:
-- -------------------- ---- -------
----- -------- - -------------------
----- -------- - -------------------------
----- -------- - --- --------------- -- ------------------- ---- ----
----------------------------- --------- ----------
------------- -- ----------------------
-- ---
-- -
-- -------- ------------ ------ ---
-- -------- ----------- ------- ----------
-- -------- ------------ ------ --
-- -Promise.any() 的详细解读
Promise.any() 的核心在于**“只要有一个成功就好”**。 它接收一个 Promise 数组,返回一个新的 Promise,一旦数组中任何一个 Promise 成功 (fulfilled),则返回的 Promise 也会成功,并携带第一个成功 Promise 的值。如果数组中所有 Promise 都失败 (rejected),则返回的 Promise 失败,并携带一个 AggregateError 错误对象,该对象包含所有 rejected 的原因。
例子:
-- -------------------- ---- -------
----- -------- - -------------------------
----- -------- - --------------------------
----- -------- - -------------------------
---------------------- --------- ----------
----------- -- ------------------- -- -- ------
------------ -- ----------------------
----- -------- - -------------------------
----- -------- - -------------------------
---------------------- ----------
----------- -- -------------------
------------ -- -------------------- -- -- --------------- --- -------- ---- --------