回调地狱是什么?

回调函数存在一个「可读性」的问题。

而可读性多指回调地狱(Callback hell),如果多个请求存在依赖性,那么就可能写出如下代码:

ajax(url, () => {
  // 处理逻辑
  ajax(url1, () => {
    // 处理逻辑
    ajax(url2, () => {
      // 处理逻辑
    })
  })
})

我们可以看下这段代码,显然是不利于阅读和维护的。这就是「回调地狱」。

回调地狱

当然你可能会说,解决这个问题还不简单,将函数分开来写不就行了?

function firstAjax() {
  ajax(url1, () => {
    // 处理逻辑
    secondAjax()
  })
}
function secondAjax() {
  ajax(url2, () => {
    // 处理逻辑
  })
}
ajax(url, () => {
  // 处理逻辑
  firstAjax()
})

上述代码表面上看有利于阅读了,但是治标不治本。

回调地狱的根本问题是:

1、嵌套函数存在「耦合性」,一旦有变动,就会牵一发而动全身。

2、嵌套函数一多就会导致,很难处理错误。

当然了,这篇文章主要是来介绍「回调地狱是什么?」,关于回调地狱如何解决这里不作讨论了。