回调地狱是什么意思?

在还没有Promise的时候,我们在处理一个异步请求时,通常都是在回调函数中处理的,例如我们处理一个Ajax请求的代码是这样写的:

$.ajax({
  url: 'testUrl',
  success: function() {
    // 回调函数
  }
});

假设在一个行为中,需要执行多个异步请求,每一个请求又需要依赖上一个请求的结果,按照回调函数的处理方法,代码如下:

// 第一个请求
$.ajax({
  url:'url1',
  success: function() {
    //第二个请求
    $.ajax({
      url: 'url2',
      success: function() {
        //第三个请求
        $.ajax({
          url: 'url3',
          success: function() {
            //第四个请求
            $.ajax({
              url: 'url4',
              success: function() {
                //成功地回调
              }
            })
          }
        })
      }
    })
  }
})

其实,一个行为可以产生若干个异步请求,10个、甚至100个都是可能的。

这就会导致代码嵌套太深,引发“回调地狱”。

回调地狱

“回调地狱”不是什么好事,因为它存在以下几个问题:

1.代码比较臃肿,可读性差。我们程序员写代码有个原则就是,尽量去写可读性强的代码。

2.代码耦合度高,不利于维护,也难以复用。

3.回调函数都是匿名函数,不方便调试。

解决异步编程中“回调地狱”问题的方案是:Promise。