2026年5月30日 02:24
Promise 和回调函数有什么区别?为什么能解决回调地狱?
Promise 和回调函数都能处理异步,但抽象层次不同。回调是“异步完成后调用你给的函数”,容易出现多层嵌套、错误分散、控制流难追踪;Promise 把异步结果封装成一个有状态对象,可以链式调用、统一 catch、组合 all/race/any/allSettled。面试里可以说:Promise 不是让异步变同步,而是让异步流程更可组合、错误更集中、代码更容易维护。
追问
Promise 解决了回调地狱吗?
解决了一部分。链式 then 可以拉平嵌套,async/await 又进一步接近同步写法。但如果业务拆分不好,Promise 链也会写得很乱。
Promise 的错误处理强在哪里?
回调通常要每层传 err;Promise 的错误会沿链传播,最后一个 catch 可以兜底处理。
回调还有用吗?
有。事件监听、流、Node 风格 API、低层库里仍常见回调。Promise 更适合“一次性成功或失败”的异步结果。
Promise 有什么代价?
它会引入微任务调度和对象创建,不适合滥用在纯同步逻辑里。性能敏感代码要避免无意义包装。
写段代码
javascriptreadFile('a.txt') .then(parse) .then(save) .catch(handleError);