# 💡 Summary
回调地狱本质上是**异步编程范式与人类线性思维方式的冲突**
本质是:我未来要做一堆事,这一堆事之间又有依赖关系
1. 如果这些事没有依赖关系,可以并行做,就不会有回调地狱
2. 如果这些事是同步的(立即完成),也不会有回调地狱
3. JavaScript 是单线程的,为了不阻塞主线程,很多操作(如网络请求、文件读取、定时器)都是异步的。早期 JavaScript 主要通过回调函数来处理异步结果。
4. 当多个异步操作需要按顺序执行,或者后一个操作依赖前一个操作的结果时,就需要在回调函数中嵌套另一个回调函数。
## 优雅写法
```Java
// Promise 链式
doA()
.then(a => doB(a))
.then(b => doC(b))
.then(c => done(c))
.catch(handleError); // 统一错误处理
// async/await
try {
const a = await doA();
const b = await doB(a);
const c = await doC(b);
done(c);
} catch (error) {
handleError(error);
}
```
# 地狱写法
1. **认知负担巨大**
2. 2. **作用域混乱**
3. 3. **错误处理噩梦**
```Java
doSomething(function(result) {
doSomethingElse(result, function(newResult) {
doThirdThing(newResult, function(finalResult) {
doFourthThing(finalResult, function(end) {
// 代码不断向右缩进
// 形成"末日金字塔"
// 屏幕放不下
});
});
});
});
```
# 🧩 Cues
# 🪞Notes