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 里吞错。
写段代码
jsasync 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 } ); }