Promise.allSettled 函数的用法详解
Promise.allSettled 函数的用法详解及使用场景说明
用法详解
Promise.allSettled 是 JavaScript ES2020 (ES11) 中引入的一个静态方法,用于处理多个 Promise,并在所有 Promise 都已经成功(fulfilled)或失败(rejected)后,返回一个包含每个 Promise 结果的数组。
语法:
Promise.allSettled(iterable)
iterable
:一个可迭代对象(如数组),其中包含多个 Promise。
返回值:
- 返回一个新的 Promise,该 Promise 在所有给定的 Promise 都已经 fulfilled 或 rejected 后完成。
- 返回的 Promise 解析为一个数组,数组中的每个元素都是一个对象,表示对应 Promise 的结果。
- 如果 Promise 成功(fulfilled),则对象包含
status: 'fulfilled'
和value
属性,其中value
是 Promise 的解决值。 - 如果 Promise 失败(rejected),则对象包含
status: 'rejected'
和reason
属性,其中reason
是 Promise 的拒绝原因。
- 如果 Promise 成功(fulfilled),则对象包含
示例代码:
const promise1 = Promise.resolve(42);
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'error'));
const promise3 = Promise.resolve('Hello World');
Promise.allSettled([promise1, promise2, promise3]).then((results) => {
results.forEach((result) => {
if (result.status === 'fulfilled') {
console.log(`Fulfilled with value: ${result.value}`);
} else {
console.log(`Rejected with reason: ${result.reason}`);
}
});
});
在这个例子中,promise1
和 promise3
成功解决,而 promise2
被拒绝。Promise.allSettled()
返回的 Promise 将解析为一个包含这三个 Promise 结果的数组。输出结果将显示 promise1
和 promise3
的成功值,以及 promise2
的拒绝原因。
使用场景说明
-
并行任务处理:
当需要并行执行多个异步任务,并且需要在所有任务都完成后(无论成功还是失败)进行汇总或处理时,可以使用
Promise.allSettled()
。例如,同时从多个 API 获取数据,并在所有数据都获取后进行汇总分析。 -
容错处理:
在执行多个可能失败的异步操作时,如果希望即使某些操作失败也能继续处理其他操作的结果,可以使用
Promise.allSettled()
。例如,从多个数据源获取数据,即使某些数据源返回错误,也可以继续处理其他数据源返回的数据。 -
日志记录:
当需要记录多个异步操作的结果,无论它们是否成功时,可以使用
Promise.allSettled()
。例如,在执行一系列异步操作时,记录每个操作的成功或失败状态以及相关的结果或错误信息。 -
依赖多个异步条件的决策:
在某些情况下,可能需要根据多个异步操作的结果来做出决策,而这些操作中的某些可能会失败。使用
Promise.allSettled()
可以确保在所有操作都完成后才进行决策,同时考虑到每个操作的成功或失败情况。
总的来说,Promise.allSettled()
是一个有用的工具,用于处理多个 Promise 并在所有 Promise 都完成后(无论成功还是失败)获取它们的结果。它特别适用于需要并行任务处理、容错处理、日志记录以及依赖多个异步条件的决策等场景。
- 点赞
- 收藏
- 关注作者
评论(0)