异步编程初体验 —— 回调地狱真的存在吗

JavaScript 是单线程语言,异步编程是它的核心特点之一。刚接触异步的时候,我的大脑经常在同步和异步之间切换不过来。
最基础的异步就是定时器 setTimeout。明明写在后面的代码,却比定时器里的代码先执行:
javascript
运行
console.log('1');
setTimeout(() => console.log('2'), 1000);
console.log('3');
// 输出顺序:1 3 2
刚开始特别不适应,后来理解了事件循环和任务队列的概念,才明白 JS 是怎么处理异步的。
然后就是回调函数。如果异步操作有依赖关系,就会出现回调嵌套回调的情况,也就是传说中的 "回调地狱":
javascript
运行
// 回调地狱示例
getData1(function(res1) {
getData2(res1, function(res2) {
getData3(res2, function(res3) {
console.log(res3);
});
});
});
好在 ES6 推出了 Promise,用链式调用替代了嵌套:
javascript
运行
getData1()
.then(res1 => getData2(res1))
.then(res2 => getData3(res2))
.then(res3 => console.log(res3))
.catch(err => console.error(err));
后来又有了 async/await,用同步的写法写异步代码:
javascript
运行
async function fetchData() {
try {
const res1 = await getData1();
const res2 = await getData2(res1);
const res3 = await getData3(res2);
console.log(res3);
} catch (err) {
console.error(err);
}
}
从回调函数到 Promise 再到 async/await,能看到前端技术一直在往更优雅、更易维护的方向发展。学习的过程,也是见证技术演进的过程。

posted @ 2026-07-09 19:02  dangguang  阅读(0)  评论(0)    收藏  举报