EngineeringPersonal Project (个人项目)

Promise Concurrency

Project: StoryCraft (AI 绘本)
简历背景

"StoryCraft: 并行触发绘图与语音合成任务..."

面试题

Promise.all 和 Promise.allSettled 的区别?如果你绘图失败了但语音成功了咋办?

Promise.all 具有"短路"特性,只要有一个 reject,整体就立刻 reject。Promise.allSettled 会等待所有任务结束,无论成功失败,返回状态数组。在 StoryCraft 中,为了容错,应该用 allSettled。
**场景分析:** StoryCraft 场景:生成文字 -> (并行) 生成图片 + 生成语音。 如果不希望图片挂了导致语音也不播放: ```js const results = await Promise.allSettled([genImage(), genAudio()]); const image = results[0].status === 'fulfilled' ? results[0].value : defaultImage; const audio = results[1].status === 'fulfilled' ? results[1].value : null; ``` **Promise.all 原理:** 它返回一个新的 Promise。内部维护一个计数器 `count`。 遍历数组,对每个 item 也就是 `Promise.resolve(item).then(...)`。 每成功一个,`count++`。当 `count === length`,resolve 结果数组。 一旦 catch 到错误,直接 reject 外层 Promise。