javascript 中实现异步操作的并发分类,核心在于使用 promise.all、promise.race 和 promise.allsettled 这三个静态方法。它们分别对应“全部成功”、“竞速获胜”和“独立结果”三种并发场景,开发者只需将一组 promise 对象传入这些方法,即可根据业务需求获取聚合后的状态或值。

Promise.all 在全部任务成功时返回什么
Promise.all 在所有输入 Promise 都变为 fulfilled 时返回一个包含所有结果的数组,只要有一个 rejected 就立即失败。它适用于需要依赖多个异步操作完整结果的场景,例如并行加载用户信息和订单数据后渲染页面。如果某个任务失败,后续逻辑会被阻断,因此适合对一致性要求高的操作。

const p1 = Promise.resolve(1); const p2 = Promise.resolve(2); const p3 = Promise.resolve(3); Promise.all([p1, p2, p3]).then(results => { console.log(results); // [1, 2, 3] });
Promise.race 在竞速场景中如何决定胜负
Promise.race 返回第一个改变状态的 Promise 的结果,无论它是成功还是失败。它常用于设置超时控制,或者在多个备选服务中选择响应最快的一个。一旦有任意一个 Promise settled,其余未完成的 Promise 将被忽略,但不会自动取消底层资源。

const fast = new Promise(resolve => setTimeout(() => resolve('fast'), 10)); const slow = new Promise(resolve => setTimeout(() => resolve('slow'), 50)); Promise.race([fast, slow]).then(result => { console.log(result); // 'fast' });
基于 Promise.allSettled 处理混合成功与失败的结果
Promise.allSettled 等待所有 Promise 完成,并返回一个描述每个 Promise 状态的数组对象。它解决了 Promise.all 因单个失败而整体中断的问题,允许开发者遍历结果并单独处理每个任务的成败。这在批量提交表单或执行非关键性后台任务时非常有用,确保部分失败不会导致整个流程崩溃。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











