JS-回调地狱

一、什么是回调地狱

前端的ajax和jsonp内部充斥着大量的异步,为了能够拿到异步的数据,使用了大量的回调函数,来获取将来异步执行成功之后的数据。如果请求不多时还好,一旦请求的数量达到一定程度,并且复杂度提升以后,会造成一些问题,这就是回调地狱。

二、回调函数

在发送Ajax中,客户端和服务器之间的请求和响应都是需要时间的,而我们要拿响应回来的数据就必须等响应完成,这些都是回调函数的常用场景。

let fs = require('fs');

// 【异步函数读取】
// 读取a文件
fs.readFile("./a.txt","utf-8",(err,data)=>{
  if(!err){
    console.log(data)
  }
});

// 读取b文件
fs.readFile("./b.txt","utf-8",(err,data)=>{
  if(!err){
    console.log(data)
  }
});

// 读取c文件
fs.readFile("./c.txt","utf-8",(err,data)=>{
  if(!err){
    console.log(data)
  }
});

如上述代码所示:我们想按照书写顺序分别读取三个文档的内容,虽然顺序是a.txt ···> b.txt ··· > ···c.txt,但是结果却不是预期中的那样显示,这是因为读取文件都是异步函数,互不影响,所以他们的读取顺序是不确定的。为了让他们的顺序变成如我们所想的那样,一个接一个的,就必须进行嵌套 代码演示如下:

let fs = require('fs');

// 【异步函数读取】
// 读取a文件
fs.readFile("./a.txt","utf-8",(err,data)=>{
  if(!err){
    console.log(data)
    // 读取b文件
    fs.readFile("./b.txt","utf-8",(err,data)=>{
      if(!err){
        console.log(data)
        // 读取c文件
        fs.readFile("./c.txt","utf-8",(err,data)=>{
          if(!err){
            console.log(data)
          }
        });
      }
    });
  }
});

经测试,运行结果确实如我们所想,一个接一个运行,然而要继续向下写只能继续嵌套

如此一来便形成了回调地狱。回调地狱虽然将异步函数的执行顺序变为同步。

但是这样的代码阅读性非常不好,可维护性也很差。

在下一篇里我会讲解如何使用Promise解决回调地狱的问题。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值