# 💡 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