当前位置: 首页 / 技术干货 / 正文
ajax回调函数介绍

2023-03-27

   班长 函数  ○

ajax回调函数介绍

  ●回调函数

  ○把函数 A 以实参的形式传递到 函数 B 内

  ○在函数 B 内以形参的方式调用到 函数 A

  ○此时我们可以把函数 A 叫做函数 B 的 回调函数

  ○我们在封装异步代码的时候会用到回调函数

  function fnA () {console.log('我是 fnA 函数内部的代码')}

  function fnB(callback) {callback()}

  fnB(fnA)

  ●使用回调函数封装一个异步代码

  function fn(jinnang = () => {}) {

  console.log("班长去买水了");

  const timer = Math.ceil(Math.random() * 3000);

  setTimeout(() => {

  console.log("班长买完水了");

  console.log("耗时", timer);

  console.log("按照锦囊内的内容行事");

  jinnang();

  }, timer);

  }

  /**

  * fn 函数一旦调用, 班长出发开始去买水

  * 在班长出发的时候, 给他一个锦囊

  */

  fn(() => {

  console.log("去买一瓶牛奶");

  });

  fn();

  ●上述代码已经完成了一个异步的封装

  ●不过在工作中我们更多的是封装网络请求这种异步代码

  ●但是我们这里通过一个 '买水耗时' 来模拟一个网络请求的延迟, 我们约定如果时间超过 3500 毫秒, 那么就算是失败, 否则就是成功

  function fn(jinnang = () => {}) {

  console.log("班长去买水了");

  const timer = Math.ceil(Math.random() * 3000) + 2000;

  setTimeout(() => {

  if (timer > 3500) {

  console.log("请求失败", timer);

  } else {

  console.log("请求成功", timer);

  }

  }, timer);

  }

  /**

  * fn 函数一旦调用, 班长出发开始去买水

  * 在班长出发的时候, 给他一个锦囊

  */

  fn(() => {

  console.log("去买一瓶牛奶");

  });

  fn();

  ●此时我们已经封装完毕了, 只不过这种封装方式会带来另一个问题, 就是回调地狱

  ●回调地狱: 当你使用回调函数过多的时候, 会出现的一种代码书写结构

  ●需求:

  ○再买水成功后, 让班长帮忙退掉

  ○在推掉以后, 再次让班长帮忙买水 (此时必须要在前一瓶水购买完成之后再去购买)

  ○在第二次买水成功以后, 再次让班长去买水

  fn(

  () => {

  console.log("班长第一次买水成功, 帮我退掉");

  fn(

  () => {

  console.log("班长第二次买水成功");

  fn(

  () => {

  console.log("班长第三次买水成功");

  },

  () => {

  console.log("班长第三次买水失败");

  }

  );

  },

  () => {

  console.log("班长第二次买水失败");

  }

  );

  },

  () => {

  console.log("班长第一次买水失败");

  }

  );

  ●这段代码运行没有任何问题, 但是阅读起来极其不利于理解

  ○原因:

  ■按照回调函数的语法进行封装, 只能通过传递一个函数作为参数来调用

  ■当你使用回调函数过多的时候, 会出现回调地狱的代码结构

  ○解决:

  ■不按照回调函数的语法封装

  ■ES6 推出了一种新的封装异步代码的方式, 叫做 Promise (承诺, 期约)

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号