es6 中的生成器 generator / 迭代器 / async /await 到底是个啥,使用场景

生成器 generator 到底是个啥

  1. 是一个函数
    1. 可以用来遍历数据结构
    2. 是解决异步编程的一种方案
    3. 进行数据流的生成和控制
    4. 协程和状态机
  2. 返回一个生成器对象/可迭代对象
    1. 生成器对象: 生成器对象是由生成器函数返回的对象,它符合迭代器协议(Iterator Protocol)。生成器对象具有 next() 方法,用于启动生成器函数的执行,并在每次调用时返回一个包含 valuedone 属性的对象
    2. 可迭代对象: 可迭代对象是具有迭代器的对象,它符合可迭代协议(Iterable Protocol)。可迭代对象通常是包含有限或无限序列的数据结构,例如数组、集合、映射等。可迭代对象可以通过 for...of 循环或 ... 扩展运算符等方式进行迭代
    3. 生成器对象是一种特殊的可迭代对象,因为它们符合迭代器协议。
  3. function 关键字和函数名之间有一个*型号
  4. 函数内部使用 yield 表达式,定义不同的内部状态
  5. 通过 next 方法才会遍历到 下一个内部状态
  6. 调用生成器之后的可迭代对象的Symbol.iterator属性,返回它自身
  7. 可以是用 for ...of 遍历 生成器的运行结果,因为是一个可迭代对象
  8. 可以通过生成器把对象变成可迭代对象,参考这篇文章,真的超级好用
  9. 异步解决方案
    1. Generator不是为了异步设计出来的,他还有其他功能
      1. 对象迭代
      2. 控制输出,使用 yield 暂停
      3. 部署iterator接口
    2. promise 和 async/await 是专门用于处理异步数据的
    3. generator ,async 需要与promise 对象搭配处理异步情况
    4. async 实质是 generator 的语法糖,相当于会自动执行 generator 函数
      1. 语法糖是一种编程语言中常用的概念,指的是对语言的语法进行改进或扩展、以便更方便,更易读,更符合人类直觉的方式编写代码,但并不改变语言的基本功能或语义。简单来说,语法糖是一种语法上的美化,它并不引入新的功能,只是让代码更易于理解和书写。
      2. ?:三元运算符是if-else 结构的语法糖
    5. await 是用于异步函数中的关键字,他是 yield 的语法糖
    6. async/await 约等于 generator + promise
    7. async/await 将异步变成串行执行
    8. async 返回一个promise 函数
  10. 生成器可以看作是一个更加灵活的迭代器

生成器的使用场景

  1. 把对象变成迭代对象,再对象上实现 iterator 接口
  2. 异步解决的一种方案,使用 async 语法糖
  3. 实现遍历
  4. 实现状态机
    1. 状态机,用于描述程序的行为和状态转换。
    2. 没调用一次生成器对象切换一个状态

迭代器Iterator是个啥

  1. Iterator 是一个循环接口,任务实现了这个接口的数据都可以被 for ... of 遍历
  2. 循环语句调用对象的 data[Symbol.iterator] 函数,根据返回值来进行循环
  3. 任何提供了 Iterator 接口的就可以被循环
  4. 参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/408380.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

异步框架Celery在Django中的运用

参考博客:https://www.cnblogs.com/pyedu/p/12461819.html 参考视频:01 celery的工作机制_哔哩哔哩_bilibili 定义:简单灵活、处理大量消息的分布式系统,专注于实时处理异步队列,支持任务调度 主要架构: …

【C++那些事儿】C++入门 | 命名空间 | 缺省参数 | 引用 | 内联函数 | auto关键字 | 范围for循环 | nullptr

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C那些事儿 🌅 有航道的人,再渺小也不会迷途。 文章目录 前言1. C关键字(C98)2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C输入&输出4. 缺…

【Linux基础】vim、常用指令、组管理和组权限

Linux基础 1、目录结构2、vi和vim3、常用指令运行级别找回密码帮助指令时间日期指令搜索查找文件目录操作磁盘管理指令压缩和解压缩 4、组管理和组权限用户操作指令权限 1、目录结构 Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”&a…

StarRocks——滴滴OLAP的技术实践与发展方向

原文大佬的这篇StarRocks实践文章整体写的很深入,介绍了StarRocks数仓架构设计、物化视图加速实时看板、全局字典精确去重等内容,这里直接摘抄下来用作学习和知识沉淀。 目录 一、背景介绍 1.1 滴滴OLAP的发展历程 1.2 OLAP引擎存在的痛点 1.2.1 运维…

K线实战分析系列之十:市场进入犹豫不定状态——孕线形态

K线实战分析系列之十:市场进入犹豫不定状态——孕线形态 一、重要反转形态二、其他反转形态三、孕线形态四、孕线形态和吞没形态的区别五、十字孕线形态六、总结孕线形态 一、重要反转形态 伞形线吞没形态乌云盖顶刺透形态启明星形态黄昏星形态十字启明星与十字黄昏…

Java之线程池:线程池常用类、接口;线程池执行流程,配置参数,分类

线程池 什么是线程池? 线程池:一种基于池化思想管理和使用线程的机制 线程池常用类和接口 ExecutorService接口:进行线程池的操作访问Executors类:创建线程池的工具类ThreadPoolExecutor及其子类:封装线程池的核心参…

K线实战分析系列之九:顶底判断——流星和倒锤子线

K线实战分析系列之九:顶底判断——流星和倒锤子线 一、流星线二、倒锤子线三、总结流星形态和倒锤子形态 一、流星线 主要特征是实体比较小,位于低端位置,带着长上影线,就像流星划过天际时,拖着一个长长的尾巴&#xf…

Unity(第三部)新手绘制地形

1、创建地形 游戏对象3d对象地形 2、功能 1、 红框内按键为创建相邻地形、点击后相近地形会呈现高亮框、点击高亮区域可以快速创建地形 每块地形面积是1km*1km 2、第二个按钮是修改地形 下面的选择是修改类型 选项含义描述Raise or Lower Terrain升高或降低地形单击左键可…

STM32 TCP实现OTA

芯片:stm32f407 开发平台:stm32cubeide 上位机开发平台:visual studio 2017 1. FLASH分配 将flash划分为四个部分: bootloader: 0x8000000-0x800ffff app1: 0x8010000-0x805ffff app2: …

GEE入门篇|遥感专业术语(实践操作3):时间分辨率(Temporal Resolution)

目录 时间分辨率(Temporal Resolution) 1.Landsat 2.Sentinel-2 时间分辨率(Temporal Resolution) 时间分辨率是指特定传感器图像流的重访时间或时间节奏,重访时间是指卫星连续访问地球表面同一位置…

程序员副业接单做私活避坑指南

最近有不少读者私信我想接私活,想赚外快。 这篇文章系统的分享了对接单做私活这件事情的思考,也给出一些干货建议。希望让大家少走一些弯路,不要被坑。 先说结论 不建议大家在接单这个事情上投入太大精力,如果你“贼心不改”&am…

Nginx基本操作

目录 引言 一、Nginx配置文件详解 (一)配置文件 (二)模块 二、全局配置文件 (一)关闭版本或修改版本 1.关闭版本号 2.修改版本信息 (二)修改启动的进程数 (三&…

MongoDB之客户端工具与核心概念及基本类型篇

MongoDB之客户端工具与核心概念及基本类型篇 文章目录 MongoDB之客户端工具与核心概念及基本类型篇1. MongoDB是什么?1. 关于MongoDB2. 相关客户端工具1. MongoDB Compass2. Studio 3T3. Navicat for MongoDB4. NoSQL Manager for MongoDB Professional 2.MongoDB相关概念2.1 …

Linux安装JDK,Tomcat,MySQL的安装以及项目部署

一、jdk安装配置 传入资源 连接后,创建存放资源的文件,将jdk,tomcat,Mysql的压缩包复制到文件中。 输入命令: cd javaCloudJun/software (进入要文件中) 输入命令 : pwd (查看当前的文件路径) 将文件路径复制到左边的搜索框中…

接口测试实战--自动化测试流程

一、项目前期准备 常见项目软件架构: springMvc:tomcat里运行war包(在webapps目录下) springboot:java -jar xx.jar -xms(**) 运行参数 springCloud:k8s部署,使用kubectl create -f xx.yaml 接口自动化测试介入需越早越好,只要api定义好就可以编写自动化脚本; 某个…

掌握BeautifulSoup4:爬虫解析器的基础与实战【第91篇—BeautifulSoup4】

掌握BeautifulSoup4:爬虫解析器的基础与实战 网络上的信息浩如烟海,而爬虫技术正是帮助我们从中获取有用信息的重要工具。在爬虫过程中,解析HTML页面是一个关键步骤,而BeautifulSoup4正是一款功能强大的解析器,能够轻…

typecho 给文章创建目录树

受益于 shortcode 短代码插件和泽泽短代码中目录树的显示样式&#xff0c;形成了自己实现添加文章目录的思路&#xff1a; 一、文章目录树的结构 <div id"toc"><div class"toc-left"><div class"toc-btn" type"button&quo…

1.QT简介(介绍、安装,项目创建等)

1. QT介绍 Qt&#xff08;官方发音 [kju:t]&#xff09;是一个跨平台的C开发库&#xff0c;主要用来开发图形用户界面&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;程序 Qt 是纯 C 开发的&#xff0c;正常情况下需要先学习C语言、然后在学习C然后才能使用…

三院院士 Michael I. Jordan 指出:大模型在两个方向仍需 “努力“,补充过度自信问题和逆转诅咒问题

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 三院院士 Michael I. Jordan 指出&#xff1a;大模型在两个方向仍需 “努力“ Michael I. Jordan 的个人主页&#xff1a;https://people.eecs.berkeley.edu/~jordan/ 回顾过去的一年&#xff0c;大模…

【数据结构和算法初阶(c语言)】数据结构前言,初识数据结构(给你一个选择学习数据结构和算法的理由)

1.何为数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的 数据元素的集合。本质来讲就是在内存中去管理数据方式比如我们的增删查改。在内存中管理数据的方式有很多种&#xff08;比如数组结构、链式结构、树型结…