返回
并行处理的福音:NodeJS 中的 Promise.allSettled
前端
2023-09-23 19:28:00
Promise.allSettled 简介
Promise.allSettled 是 JavaScript 中的一个内置函数,它接受一个 Promise 数组作为参数,并返回一个新的 Promise。新的 Promise 将在所有传入的 Promise 都完成或拒绝后才完成或拒绝。
与 Promise.all 不同,Promise.allSettled 不会等到所有传入的 Promise 都完成或拒绝才返回结果。相反,它会立即返回一个结果数组,其中每个元素都是一个包含以下信息的 Promise 解决对象:
- status:表示 Promise 的状态,可以是 "fulfilled" 或 "rejected"。
- value:如果 Promise 已完成,则为 Promise 的结果值;如果 Promise 已拒绝,则为 undefined。
- reason:如果 Promise 已拒绝,则为 Promise 的拒绝原因;如果 Promise 已完成,则为 undefined。
Promise.allSettled 的用法
Promise.allSettled 的用法非常简单,只需将一个 Promise 数组作为参数传递给它即可。然后,它将返回一个新的 Promise,该 Promise 将在所有传入的 Promise 都完成或拒绝后才完成或拒绝。
例如,以下代码使用 Promise.allSettled 来并行获取两个用户的详细信息:
const user1Promise = fetchUserDetails(1);
const user2Promise = fetchUserDetails(2);
Promise.allSettled([user1Promise, user2Promise])
.then((results) => {
console.log(results);
});
在上面的示例中,Promise.allSettled 会立即返回一个结果数组,其中包含两个 Promise 解决对象。每个解决对象都包含有关相应 Promise 的状态、结果值和拒绝原因的信息。
Promise.allSettled 的优势
Promise.allSettled 有许多优势,包括:
- 并行处理异步操作: Promise.allSettled 可以让您并行处理多个异步操作,从而提高代码的执行效率。
- 等待所有操作完成: Promise.allSettled 会等待所有传入的 Promise 都完成或拒绝后才返回结果,这使得您可以确保在处理结果之前所有操作都已完成。
- 获取所有操作的结果: Promise.allSettled 会返回一个结果数组,其中包含所有传入 Promise 的结果值或拒绝原因,这使得您可以轻松地获取所有操作的结果。
结语
Promise.allSettled 是 JavaScript 中一个非常有用的工具,它可以帮助您编写更健壮、更易读的异步代码。如果您需要并行处理多个异步操作,那么 Promise.allSettled 是一个非常好的选择。