JavaScript异步编程核心是避免阻塞主线程,回调函数易致回调地狱且错误处理分散,Promise则通过状态封装、链式调用和错误冒泡提升可读性与组合能力。
JavaScript 的异步编程核心是避免阻塞主线程,让耗时操作(如网络请求、文件读取、定时器)不卡住页面。回调函数和 Promise 都是用来处理异步任务的机制,但设计思想、可读性、错误处理和组合能力差别明显。

回调函数是把一个函数作为参数传给另一个函数,在异步操作完成后由该函数“回头调用”。比如:
setTimeout(() => console.log('执行完了'), 1000);
常见问题包括:
Promise 是一个代表异步操作最终完成或失败的对象,有三种状态:pending(进行中)、fulfilled(成功)、rejected(失败)。创建后状态不可逆,且只能改变一次。
它通过 .then() 和 .catch() 统一处理成功与失败,支持链式调用:
fetch('/api/data')
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error('出错了', err));
优势包括:
回调函数是“你告诉我做完后怎么处理”,属于过程式思维;Promise 是“我给你一个承诺对象,你随时可以决定怎么响应结果”,属于声明式、可组合的对象模型。Promise 不是替代回调,而是对回调模式的抽象升级——它内部仍可能使用回调,但对外提供了更可靠、更易维护的接口。