开发者社区> 问答> 正文

什么是回调函数?有什么缺点?如何解决回调地狱问题?

什么是回调函数?有什么缺点?如何解决回调地狱问题?


【精品问答】前端面试手册

【精品问答】前端面试手册之JavaScript篇

展开
收起
前端问答 2019-11-24 19:57:15 2617 0
1 条回答
写回答
取消 提交回答
  • 前端问答小助手

    回调函数应该是大家经常使用到的,以下代码就是一个回调函数的例子:

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

    但是回调函数有一个致命的弱点,就是容易写出回调地狱(Callback hell)。假设多个请求存在依赖性,你可能就会写出如下代码:

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

    以上代码看起来不利于阅读和维护,当然,你可能会想说解决这个问题还不简单,把函数分开来写不就得了

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

    以上的代码虽然看上去利于阅读了,但是还是没有解决根本问题。

    回调地狱的根本问题就是:

    • 嵌套函数存在耦合性,一旦有所改动,就会牵一发而动全身
    • 嵌套函数一多,就很难处理错误

    当然,回调函数还存在着别的几个缺点,比如不能使用 try catch 捕获错误,不能直接 return。在接下来的几小节中,我们将来学习通过别的技术解决这些问题。

    2019-12-17 07:24:47
    赞同 1 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
fibjs 模块重构从回调到协程 立即下载
fibjs 模块重构从回调到协程--陈垒 立即下载
低代码开发师(初级)实战教程 立即下载