还在用 Promise.all?2025 必学的高性能并发控制 API 来了

在 JavaScript 异步编程的世界里,Promise.all一直是并发控制的主要工具。然而,它存在一个明显的短板:一旦其中一个任务失败,整个流程就会停止,所有其他任务的结果都无法获取。如今,一个更强大的 API 已经成为开发者处理并发任务的理想选择。
Promise.allSettled 的优势
Promise.allSettled是 JavaScript 提供的并发控制 API,它允许你等待所有 Promise 完成(无论是履行还是拒绝),并获取每个 Promise 的最终状态和结果。与Promise.all不同,Promise.allSettled不会因为单个 Promise 拒绝而短路,它会继续等待所有 Promise 完成。
基本用法
const promises = [
Promise.resolve(1),
Promise.reject("出错了"),
Promise.resolve(3)
];
Promise.allsettled(promises)
.then(results => {
console.log(results);
// [
// { status: "fulfilled", value:1 },
// { status: "rejected", reason:"出错了" },
// { status: "fulfilled", value:3 }
// ]
});
与 Promise.all 的对比
Promise.all在处理多个异步任务时,一旦有一个 Promise 被拒绝,整个Promise.all就会立即拒绝,不会等待其他 Promise 完成。这在某些场景下可能是期望的行为,但在很多情况下,我们希望即使部分任务失败,也能获取所有任务的结果。
实际应用场景
批量数据处理
当你需要处理大量独立的数据项,且每个处理过程都可能失败时,Promise.allSettled 是理想的选择。
async function processItems(items) {
const promises = items.map(item => processItem(item));
const results = await Promise.allSettled(promises);
const succeeded = results
.filter(result => result.status ==="fulfilled")
.map(result => result.value);
const failed = results
.filter(result => result.status === "rejected")
.map(result => result.reason);
return { succeeded, failed };
}
API 请求聚合
当你需要向多个端点发送请求,并且需要汇总所有结果时,Promise.allSettled能够确保你获得所有可用数据,即使部分请求失败。
并发任务管理
当你有多个独立的任务需要并行执行,每个任务的成功或失败不应影响其他任务时,Promise.allSettled是更安全的选择。
其他并发控制 API
除了Promise.allSettled,JavaScript 还提供了其他并发控制 API:
- Promise.all:当所有 Promise 都需要成功时使用
- Promise.race:当只需要最快完成的 Promise 结果时使用
- Promise.any:当只需要获取第一个成功的 Promise 结果时使用
Promise.allSettled为 JavaScript 开发者提供了更强大的并发控制能力。在处理多个异步任务时,它能确保获取所有任务的最终状态,无论成功与否,这使得错误处理和结果处理变得更加灵活和可靠。
以上关于还在用 Promise.all?2025 必学的高性能并发控制 API 来了的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 还在用 Promise.all?2025 必学的高性能并发控制 API 来了

微信
支付宝