Callback Hell 是什么

Callback Hell(回调地狱)是指: 当多个异步操作依赖前一个操作结果时, 代码被层层嵌套,结构像“金字塔”一样往右扩。

// ======================== 定义异步任务函数 ========================
// 每个函数都接收一个 callback,当定时任务结束后执行 callback()
// 模拟异步操作(如网络请求、数据库读取等)
function task1(callback){
  // 模拟耗时 2 秒的任务
  setTimeout(() => {
      console.log("task 1 complete"); // 任务1完成
      callback();                     // 调用下一步
  }, 2000);
}
function task2(callback){
  setTimeout(() => {
      console.log("task 2 complete"); // 任务2完成
      callback();                     // 调用下一步
  }, 1000);
}
function task3(callback){
  setTimeout(() => {
      console.log("task 3 complete"); // 任务3完成
      callback();                     // 调用下一步
  }, 3000);
}
function task4(callback){
  setTimeout(() => {
      console.log("task 4 complete"); // 任务4完成
      callback();                     // 调用下一步
  }, 1500);
}
 
// ======================== 回调地狱示例 ========================
// 开始执行任务1
task1(() => {
  // 当任务1完成后,执行任务2
  task2(() => {
    // 当任务2完成后,执行任务3
    task3(() => {
      // 当任务3完成后,执行任务4
      task4(() => {
        // 所有任务完成后输出最终消息
        console.log("all tasks complete");
      });
    });
  });
});
  • 每个任务都嵌套在前一个任务的 callback() 里。
  • 因为异步执行要“等待前一个任务完成”,我们只能层层嵌套。
  • 这就造成了所谓的 “callback hell”(回调地狱) —— ❗ 结构过深、难以阅读、难以维护。