2026年5月30日 02:24

Promise 错误处理面试怎么答?

Promise 错误处理要抓住两句话:错误会沿 Promise 链向后传播,最近的 catch 或 then 第二个参数会接住它;catch 返回普通值表示恢复,重新 throw 才会继续失败。项目里一般推荐在链尾统一 catch,async/await 用 try/catch;多个任务用 Promise.allSettled 处理部分失败,避免一个请求失败拖垮全部结果。

追问

catch 和 then 的第二个参数有什么区别?

then 的第二个参数只能处理前一个 Promise 的失败,抓不到同一个 then 成功回调里新抛出的错误;catch 更适合放在链尾统一兜底。

catch 里 return 和 throw 有什么区别?

return 会把链恢复成 fulfilled,后面的 then 会继续走;throw 或 return rejected Promise 才会让后续 catch 接着处理。

Promise.all 里一个失败怎么办?

Promise.all 会快速失败,只要一个 reject 整体就 reject。需要拿到每个任务结果时,用 Promise.allSettled,或给每个任务单独 catch。

未捕获的 Promise 错误怎么排查?

浏览器看 unhandledrejection,Node 看 unhandledRejection 日志。根因通常是忘记 await、忘记 return Promise,或 catch 里吞错。

写段代码

js
async function loadAll(tasks) { const results = await Promise.allSettled(tasks.map(t => t())); return results.map(r => r.status === 'fulfilled' ? r.value : { error: r.reason.message } ); }
标签:Promise