搜索

查看: 3138|回复: 11

[JavaScript] js获取异步函数数据的实现

[复制链接]
发表于 2023-5-4 11:47:17 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:47:17 3138 11 看全部
目录
  • 异步函数
  • 1. 回调函数
  • promise
  • Generator函数
  • async/await函数
  • 回调函数
  • promise
  • async await异步函数是js中经常会用到的,它的作用无非就是进行一些异步的操作(处理数据)。那么,常见的异步函数有哪些呢,我们一般又是如何获取异步函数的数据呢?今天这篇文章就是围绕这个问题去写的。

    异步函数
    一般正常情况下,js中的函数是一个一个地按照顺序来完成的。但是异步函数可以改变执行顺序。不过异步任务必须在同步任务执行结束之后,从任务队列中依次取出执行。
    常见的异步函数一共有四类:
  • 回调函数
  • promise函数
  • Generator函数
  • async/await函数
    1. 回调函数
    回调函数一般是作为某个函数的入参,然后在函数内部执行这个回调函数。常见的回调函数有ajax,setTimeouut定时器类,dom事件回调等。
    testA(cb) {
    cb();
    }
    setTimeout(() => {
    console.log('这是一个回调函数')
    }, 100)
    缺点: 不能try catch捕获错误, 不能直接return。

    promise
    promise函数是一种特殊的异步函数,里面包含三种状态:pending、fulfilled(resolved)、rejected。pending是promise的初始状态,resolved表示执行完成且成功的状态,rejected表示执行完成且失败的状态。三个状态不可逆转
    Promise本身是同步,then的内容是异步:
    let promiseFunc = new Promise((resolve, reject) => {
      // 执行同步代码
      resolve();
    }).then((res) => {
      console.log(res)
    },(err) => {
      console.log(err);
    })

    Generator函数
    Generator 是一个可以暂停执行(分段执行)的函数,函数名前面要加星号,是一个状态机,封装了多个内部状态。
    function *myTest() {
      yield 'I',
      yield 'am',
      yield 'queen'
    }

    async/await函数
    async修饰符加在函数前面,返回一个promise,可以使用then添加回调函数。 await后跟着一个promise或者一个原始类型的值(会自动转成立即 resolved 的 Promise 对象),等待resolve的结果。任何一个await后的Promise发生reject,整个aysnc都会中断,需要try{}catch(err){}来捕获错误。
    async function myTest() {
      let val = await new Promise((resolve) => {
        resolve(1)
      });
    }
    如何获取异步函数的数据
    获取异步函数的数据一般分为三种:回调函数,promise和async和await

    回调函数
    回调函数的这种很简单,就是直接将数据传进回调函数里作为入参即可。
    function getData(cb) {
      let val = 'a';
      cb(val);
    }
    getData((data) => {
      console.log(data);   // 'a'
    })
    promise
    使用promise来处理异步,主要就是利用resolve成功的回调函数,reject失败的回调函数。
    let promiseFunc = new Promise((resolve, reject) => {
      let n = Math.random();
      if (n >= 0.7) {
        resolve(n);
      } else {
        reject(`${n}小于0.7`)
      }
    });
    promiseFunc.then((data) => {
      console.log(data);   // 0.3小于0.7
    })

    async await
    async: 把函数变成异步函数。wait是等待异步函数执行完成。其中await一定要写在async里面
    async function myTest() {
      return '我是测试数据'
    };
    async function getData() {
      let val = await myTest();
      console.log(val);   // 我是测试数据
    }
    到此这篇关于js获取异步函数数据的实现的文章就介绍到这了,更多相关js获取异步函数 内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛!
  • 发表于 2023-6-29 01:31:27 | 显示全部楼层
    六翼天使494 2023-6-29 01:31:27 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛。
    发表于 2023-6-29 13:44:47 | 显示全部楼层
    落败的青春阳落s 2023-6-29 13:44:47 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-29 13:56:04 | 显示全部楼层
    哈哈SE7 2023-6-29 13:56:04 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-29 15:05:05 | 显示全部楼层
    米老鼠和蓝精鼠v 2023-6-29 15:05:05 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    发表于 2023-6-29 18:27:59 | 显示全部楼层
    心随674 2023-6-29 18:27:59 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    发表于 2023-6-29 21:50:16 | 显示全部楼层
    素色流年783 2023-6-29 21:50:16 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    发表于 2023-6-29 22:45:30 | 显示全部楼层
    永远爱你冰塘 2023-6-29 22:45:30 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    发表于 2023-6-29 23:39:45 | 显示全部楼层
    dxf17 2023-6-29 23:39:45 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    发表于 2023-6-30 02:36:15 | 显示全部楼层
    Gordon520 2023-6-30 02:36:15 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    • 您可能感兴趣
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| 小黑屋| 知鸟论坛 |网站地图
    本站资源来自互联网用户收集发布,如有侵权请邮件联系处理。 联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表