推荐答案
Promise.allSettled
是 ECMAScript 2020 引入的一个静态方法,用于处理多个 Promise 对象。它接收一个 Promise 对象数组作为参数,并返回一个新的 Promise 对象。这个新的 Promise 对象在所有输入的 Promise 对象都已完成(无论是成功还是失败)时才会被解决。返回的 Promise 对象的结果是一个数组,数组中的每个元素都是一个对象,表示对应输入 Promise 的最终状态(fulfilled
或 rejected
)及其值或原因。
本题详细解读
1. 基本用法
-- -------------------- ---- ------- ----- -------- - - ------------------- --------------------- ----------- ------------------ -- ---------------------------- ------------- -- - ---------------------- -- - -- -------------- --- ------------ - ------------------------- -------------- - ---- - ------------------------ --------------- - --- ---
2. 返回值
Promise.allSettled
返回的 Promise 对象的结果是一个数组,数组中的每个元素都是一个对象,包含以下属性:
status
: 表示 Promise 的最终状态,可以是'fulfilled'
或'rejected'
。value
: 如果状态为'fulfilled'
,则此属性包含 Promise 的解决值。reason
: 如果状态为'rejected'
,则此属性包含 Promise 被拒绝的原因。
3. 与 Promise.all
的区别
Promise.all
: 只有当所有输入的 Promise 都成功解决时,返回的 Promise 才会被解决。如果任何一个 Promise 被拒绝,返回的 Promise 会立即被拒绝,并且不会等待其他 Promise 的结果。Promise.allSettled
: 无论输入的 Promise 是成功还是失败,返回的 Promise 都会在所有输入的 Promise 完成后被解决。它不会因为某个 Promise 被拒绝而提前结束。
4. 适用场景
Promise.allSettled
适用于需要处理多个异步操作,并且希望在所有操作都完成后(无论成功或失败)再进行下一步处理的场景。例如,批量请求多个 API,并且需要知道每个请求的最终结果时,可以使用 Promise.allSettled
。
5. 示例
-- -------------------- ---- ------- ----- ----------- - - -------------------- -------------------- ------------------- -- ------------------------------- ------------- -- - ------------------------ ------ -- - -- -------------- --- ------------ - -------------------- ------- - -- ------------ -------------- - ---- - -------------------- ------- - -- --------- --------------- - --- ---
在这个示例中,无论每个 API 请求是否成功,Promise.allSettled
都会在所有请求完成后返回结果,并允许你根据每个请求的状态进行相应的处理。