JavaScript Academy · 课时

Promise.all / any / race / allSettled——选择合适的工具

练习 Promise 组合方法:all、any、race、allSettled。了解成功与失败时的行为,以及每种方法的适用场景

第 3 / 3 课8 个步骤

Promise.all / any / race / allSettled——选择合适的工具 是 CoddyKit 上的免费 JavaScript Academy 课时。 这是第 3 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 JavaScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 JavaScript Academy 课程共包含 3 节课。

组合方法概览

目标:学习四种辅助方法及其行为。

  • all:等待全部完成;快速失败
  • any:第一个成功结果
  • race:第一个 settled 结果(成功/错误)
  • allSettled:获取全部结果
Promise.all / any / race / allSettled——选择合适的工具 — 插图 1

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.all / any / race / allSettled——选择合适的工具 — 插图 2

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.all / any / race / allSettled——选择合适的工具 — 插图 3

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.all / any / race / allSettled——选择合适的工具 — 插图 4

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; }));
});
Promise.all / any / race / allSettled——选择合适的工具 — 插图 5

该使用哪一个?

选择方式:

  • all:需要全部结果;任意错误都会快速失败。
  • any:接受第一个成功结果(回退来源)。
  • race:选择最先完成的结果(超时模式)。
  • allSettled:收集每个结果以便检查。
Promise.all / any / race / allSettled——选择合适的工具 — 插图 6

组合方法选择测验

快速检查:第一个已兑现的结果。

Promise.all / any / race / allSettled——选择合适的工具 — 插图 7

复习

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

Promise.all / any / race / allSettled——选择合适的工具 — 插图 8
免费开始

用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 事件循环与任务和微任务基础
  2. Promise——状态、链式调用与错误处理
  3. Promise.all / any / race / allSettled——选择合适的工具
← 返回 JavaScript Academy