并发模式(all/settled/race)的类型
使用 Promise.all / allSettled / race 建模并发,理解它们的结果类型,并构建安全的辅助函数。
并发模式(all/settled/race)的类型 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 3 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 3 节课。
简介
目标:使用 Promise.all 并发运行任务,使用 allSettled 处理混合结果,并使用 race 实现超时/备用方案。了解它们各自返回的类型。
all:元组类型
使用元组调用 Promise.all 时,会保留元素类型和顺序;每个元素都会等待并转换为其内部类型。
async function one(): Promise<number> { return 1 }
async function two(): Promise<string> { return "two" }
async function runAll() {
const [a, b] = await Promise.all([one(), two()]);
// a: number, b: string
console.log(a + 1, b.toUpperCase());
}
runAll();all:并发映射
先启动多个任务,然后使用 await 一起等待它们。这里 Promise.all 会得到 string[]。
async function fetchItem(id: number): Promise<string> {
return `item-${id}`;
}
async function getMany(ids: number[]): Promise<string[]> {
const tasks = ids.map(id => fetchItem(id)); // start all
return Promise.all(tasks); // await all
}
getMany([1,2,3]).then(xs => console.log(xs));allSettled 类型
allSettled 永远不会拒绝;它会解析为一个数组,其中包含已完成或已拒绝的结果对象,您可以根据 status 对其进行收窄。
async function mightFail(n: number): Promise<number> {
if (n % 2 === 0) return n; else throw new Error("odd")
}
async function runSettled() {
const results = await Promise.allSettled([mightFail(1), mightFail(2)]);
for (const r of results) {
if (r.status === "fulfilled") {
// r: PromiseFulfilledResult<number>
console.log("ok", r.value);
} else {
// r: PromiseRejectedResult
console.warn("fail", r.reason);
}
}
}
runSettled();race 与超时
race 会以最先完成的 Promise 的结果进行解析或拒绝。将它与超时结合,可以限制延迟。
function timeout<T>(ms: number, msg = "Timeout"): Promise<T> {
return new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), ms));
}
async function slow(): Promise<string> { return new Promise(res => setTimeout(() => res("done"), 100)); }
async function withTimeout() {
const result = await Promise.race<Promise<string>>([
slow(),
timeout<string>(50, "Too slow"),
]);
console.log(result);
}
withTimeout().catch(e => console.error("raced:", e.message));提示与选择
提示:
- all:快速失败地汇总结果。
- allSettled:收集成功结果和错误,而不会抛出异常。
- race:用于超时/备用方案;请明确元素类型。
Promise.all 类型检查
快速检查:关于 Promise.all 类型的哪项说法是 TRUE?
回顾
回顾:使用 all 实现带类型的并行处理,使用 allSettled 检查所有结果,并使用 race 处理超时——请了解每个 API 返回的结构。
常见问题解答
「并发模式(all/settled/race)的类型」课时是免费的吗?
是的 — 「并发模式(all/settled/race)的类型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 3 节课。
「并发模式(all/settled/race)的类型」这节课中我会学到什么?
使用 Promise.all / allSettled / race 建模并发,理解它们的结果类型,并构建安全的辅助函数。 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 TypeScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 3 节。
「并发模式(all/settled/race)的类型」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 TypeScript Academy 课中编写并运行代码吗?
能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Promise 与 async/await 类型
- 错误类型(unknown)与 catch 中的收窄
- 并发模式(all/settled/race)的类型