Promise.all / any / race / allSettled——选择合适的工具
练习 Promise 组合方法:all、any、race、allSettled。了解成功与失败时的行为,以及每种方法的适用场景
Promise.all / any / race / allSettled——选择合适的工具 是 CoddyKit 上的免费 JavaScript Academy 课时。 这是第 3 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 JavaScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 JavaScript Academy 课程共包含 3 节课。
组合方法概览
目标:学习四种辅助方法及其行为。
- all:等待全部完成;快速失败
- any:第一个成功结果
- race:第一个 settled 结果(成功/错误)
- allSettled:获取全部结果

Promise.all 基础
Promise.all 会以结果数组兑现;只要有一个拒绝,整体就会拒绝。
// Small helpers for examples
function delay(ms, value, shouldFail = false) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
if (shouldFail) reject(new Error(String(value)));
else resolve(value);
}, ms);
});
}
// Promise.all waits for all; rejects fast on first error
Promise.all([
delay(10, "A"),
delay(5, "B")
]).then(function (vals) {
console.log("all:", vals);
});

Promise.any 基础
Promise.any 会以第一个成功结果兑现;只有在所有输入都拒绝时才会拒绝。
// Promise.any gives the first fulfilled value
Promise.any([
delay(8, "ok-1"),
delay(3, "ok-2"),
delay(6, "ok-3")
]).then(function (v) {
console.log("any:", v);
}).catch(function (e) {
console.log("any failed:", e.message);
});

Promise.race 基础
Promise.race 会选择最先 settled 的结果:可能是兑现,也可能是拒绝。
// Promise.race settles with the first to finish (success or error)
Promise.race([
delay(5, "win"),
delay(7, "boom", true)
]).then(function (v) {
console.log("race resolved:", v);
}).catch(function (e) {
console.log("race rejected:", e.message);
});

Promise.allSettled 基础
Promise.allSettled 始终会以一个数组兑现,其中包含每个输入的状态对象。
// Promise.allSettled waits for all and reports each outcome
Promise.allSettled([
delay(4, "A"),
delay(6, "X", true)
]).then(function (results) {
console.log("allSettled:", results.map(function (r) { return r.status; }));
});

该使用哪一个?
选择方式:
- all:需要全部结果;任意错误都会快速失败。
- any:接受第一个成功结果(回退来源)。
- race:选择最先完成的结果(超时模式)。
- allSettled:收集每个结果以便检查。

组合方法选择测验
快速检查:第一个已兑现的结果。

复习
复习:需要“全部完成”时使用 all,需要“第一个成功结果”时使用 any,需要“第一个 settled 结果”时使用 race,需要检查所有结果且不提前结束时使用 allSettled。

用 AI 导师学习 JavaScript — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 59
- 课程
- 200
常见问题解答
「Promise.all / any / race / allSettled——选择合适的工具」课时是免费的吗?
是的 — 「Promise.all / any / race / allSettled——选择合适的工具」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 JavaScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 JavaScript Academy 课程共包含 3 节课。
「Promise.all / any / race / allSettled——选择合适的工具」这节课中我会学到什么?
练习 Promise 组合方法:all、any、race、allSettled。了解成功与失败时的行为,以及每种方法的适用场景 你通过在浏览器中直接运行的动手代码来练习 JavaScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 JavaScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 JavaScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 3 节。
「Promise.all / any / race / allSettled——选择合适的工具」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 JavaScript Academy 课中编写并运行代码吗?
能。每节 JavaScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 事件循环与任务和微任务基础
- Promise——状态、链式调用与错误处理
- Promise.all / any / race / allSettled——选择合适的工具