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 有什么代价?

它会引入微任务调度和对象创建,不适合滥用在纯同步逻辑里。性能敏感代码要避免无意义包装。

写段代码

javascript
readFile('a.txt') .then(parse) .then(save) .catch(handleError);
标签:Promise