回调地狱:

网上很多关于回调地狱的图片,听起来很深奥,其实简单来说就是回调函数的嵌套,那么,什么是回调函数呢?

回调函数:

把一个函数当作参数传递,传递的是函数的定义并不会立即执行,而是在将来特定的时机再去调用,这个函数就叫做回调函数。

注意:回调函数不会阻塞主线程代码的执行。比如下图控制台打印:

为什么要用到回调函数:

在定时器setTimeout以及Ajax的请求时都会用到回调函数。

1.特定场景需求下,我们用定时器控制一个函数在指定时间后才会触发;

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

为什么要用到回调函数的嵌套:

如图所示,我们想按照书写顺序分别读取三个文档的内容,虽然顺序是a.txt ···>  b.txt ··· >  ···c.txt,但是结果却不是预期中的那样显示,这是因为读取文件都是异步函数,互不影响,

就跟百米冲刺一样,谁先到终点都是不确定的,为了达到文档读取顺序为:a、b、c,我们就必须让百米赛跑变成接力赛,拿到上个同学的接力棒,下个同学才能上赛场。

代码演示如下:

经过测试,每次打印结果都是 a、b、c文件的内容,然后如图所示,回调函数一层套一层,就逐步形成了“回调地狱”,回调地狱虽然将异步函数的执行顺序变为同步。

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

下篇我会详细介绍如何解决回调函数的嵌套,欢迎感兴趣的小伙伴阅读。

一篇文章详细介绍什么是回调地狱相关推荐

  1. 一篇文章详细介绍元宇宙

    来源:腾讯区块链 什么是元宇宙? 一千个读者眼中就有一千个哈姆雷特,元宇宙也是如此,下面讲讲我个人对元宇宙的理解,元宇宙的英文名称叫 Metaverse,区别于当前真实的宇宙 Universe,Uni ...

  2. node js Bluebird 简单介绍 promise 解决回调地狱

    Promise是异步代码实现控制流的一种方式.这一方式可以让你的代码干净.可读并且健壮. 异步回调如下: fs.readFile('directory/file-to-read', function( ...

  3. 2. Python函数式编程中的字符串,元组,函数的分类,高阶函数,一篇文章都介绍一遍

    函数式编程中的字符串 在函数式编程中,经常用到 Python 字符串,因其是不可变数据结构. 字符串本身是一个对象,具备很多对象方法,与常识中函数的使用不太相同,例如下述代码 my_str = &qu ...

  4. fastlane自动打包--详细介绍

    fastlane--Packaging 自动化打包,通过fastlane自动发布 Fastlane安装不在这里详细罗列,参照一下链接流程 https://www.jianshu.com/p/0a113 ...

  5. Android:学习AIDL,这一篇文章就够了(上)

    前言 在决定用这个标题之前甚是忐忑,主要是担心自己对AIDL的理解不够深入,到时候大家看了之后说--你这是什么玩意儿,就这么点东西就敢说够了?简直是坐井观天不知所谓--那样就很尴尬了.不过又转念一想, ...

  6. 7种抓包工具详细介绍

    在处理IP网络的故障时,经常使用以太网抓包工具来查看和抓取IP网络上某些端口或某些网段的数据包,并对这些数据包进行分析,定位问题. 在 IMON项目里,使用抓包工具抓包进行分析的场景在EPG采集.引流 ...

  7. 详细介绍如何从零开始制作51单片机控制的智能小车(二)———超声波模块、漫反射光电管、4路红外传感器的介绍和使用

       我会通过本系列文章,详细介绍如何从零开始用51单片机去实现智能小车的控制,在本系列的上一篇文章中介绍了如何让小车动起来,本文作为本系列的第二篇文章,主要介绍让小车实现自动避障所涉及的一些传感器, ...

  8. NLP的介绍和如何利用机器学习进行NLP以及三种NLP技术的详细介绍

    文章目录 什么是NLP? 为什么要学习NLP? 深度学习 技术1:文本嵌入(Text Embeddings) 技术2:机器翻译 技术3:会话 易水寒 发表于 2018-06-10 10:26:10 本 ...

  9. 一篇文章掌握整个JVM,JVM超详细解析!!!

    JVM 先想想一些问题 1 我们开发人员编写的Java代码是怎么让电脑认识的 2 为什么说java是跨平台语言 3 Jdk和Jre和JVM的区别 4 为什么要学习JVM 深入学习JVM 1 JVM运行 ...

最新文章

  1. PHP 表单文件上传的原理,php上传文件的原理
  2. java 队列和rabbitmq_java – 如何在不使消息出列的情况下浏览rabbitmq中的队列
  3. (译)如何使用cocos2d制作基于tile地图的游戏教程:第一部分
  4. c++能干什么_「CG原画插画教程」学画画到底能干什么?
  5. Linux 中/etc/profile、~/.bash_profile 环境变量配置以及区别
  6. Python入门学习笔记(1)
  7. dbf如何导入oracle_克服Oracle导数一切难题
  8. linux 设备驱动阻塞,深入浅出:Linux设备驱动中的阻塞和非阻塞I/O
  9. 高通AR系列与MTK芯片对比专业详解
  10. 基于Window Server 2016R2 + AD帐号 + Radius无线网络认证
  11. 开源软件的版权与许可证
  12. 数值分析-线性方程组的迭代法
  13. 计算机科学中atm是什么,计算机专业知识:ATM网络基本原理
  14. 语音(识别)处理教程
  15. 企企通采购网“企销通2.0”重磅上线 助力中小企业打通数字化生态
  16. 深入理解Linux启动过程 0号进程,1号进程
  17. 镁客网每周硬科技领域投融资汇总(12.16-12.22),第四范式成“五大行”联合投资唯一创企...
  18. vue SEO的解决方案
  19. html5通话记录,通话记录怎么查询
  20. 关于一个block中BN-ReLU-Conv的顺序问题

热门文章

  1. word表格跨页显示时缺少上框线
  2. 互斥锁(mutex lock)
  3. 邮箱smtp服务器及端口收集
  4. 网页复选框设置只能选一个_网页自动填表基础教程从简单开始
  5. 如何在网页上打印文字?
  6. 软件设计师-设计模式
  7. Mac查看OpenGL版本
  8. jsTree插件简介(四)
  9. Digital Image processing 数字图像处理最佳陷波滤波器设计(频域)
  10. 全球与中国聚 (3,4-亚乙基二氧噻吩) (PEDOT)市场“十四五”规划及远景目标的建议报告2022-2028年