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. 参考

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记本hp6930p安装Android-x86避坑日记

一、序言 农历癸卯年前大扫除,翻出老机hp6930p,闲来无事,便安装Android-x86玩玩,期间多次入坑,随手记之以避坑。 笔记本配置:T9600,4G内存,120G固态160G机械硬盘 二、Android-x86系统简介 官…

Low Poly Trees Pack - Flowers

包含59种程式化的低聚植物,作为.fbx网格文件和即用型预制件。 包装内含物 59 个独特的低多边形植物预制件 - 50种开花的草本植物 - 6 棵葡萄树 - 3 灌木 产品特点 -所有植物和石头预制件使用单一反照率256x256纹理图集和1种材质。 -三体计数:50-1000 -支…

JavaWeb——006MYSQL(DDLDML)

这里写目录标题 数据库开发-MySQL首先来了解一下什么是数据库。1. MySQL概述1.1 安装1.1.1 版本1.1.2 安装1.1.3 连接1.1.4 企业使用方式(了解) 1.2 数据模型1.3 SQL简介1.3.1 SQL通用语法1.3.2 分类 2. 数据库设计-DDL2.1 项目开发流程2.2 数据库操作2.2.1 查询数据库2.2.2 创…

《小狗钱钱》读书笔记

1. 写在前面 今天整理的一本书叫《小狗钱钱》,作者是有”欧洲巴菲特”之称的博多舍费尔,这是一本儿童教育的财商启蒙书,舍费尔用生动的金钱童话,将看似复杂的财富法则一一拆解,引导我们在实际生活中操作,以…

leetcode:46.全排列

1.什么是排列? 有顺序!! 2.树形结构: 使用used数组进行标记取过的元素,一个元素一个元素地进行取值,取完之后将used数组进行标记。 3.代码实现:(循环从i0开始,而不是…

C#,数组数据波形排序(Sort in Wave Form)的朴素算法与源代码

1 波形排序 所谓“波形排序”就是一大一小。 将n个身高互不相同的人排成一行 ,对于每个人 ,要求他要么比相邻的人均高 ,要么比相邻的人均矮 ,问共有多少种排法 ,这一问题称为波形排列问题。 2 源程序 using System; using System.Collections; using System.Collections.Gen…

Spring 中 ApplicationContext 和 BeanFactory 的区别有哪些

先看一张类图: 区别: 1:包目录不同: spring-beans.jar 中 org.springframework.beans.factory.BeanFactory spring-context.jar 中 org.springframework.context.ApplicationContext 2:国际化: BeanFacto…

查看mysql数据库的版本

要查看MySQL数据库的版本,可以使用以下几种方法: 命令行(已连接到MySQL服务器): 登录到MySQL服务器后,在MySQL提示符下执行: mysql> SELECT VERSION(); 或者,也可以执行 STATUS; …

Centos服务器部署前后端项目

目录 准备工作1. 准备传输软件2. 连接服务器 部署Mysql1.下载Mysql(Linux版本)2. 解压3. 修改配置4. 启动服务另一种方法Docker 部署后端1. 在项目根目录中创建Dockerfile文件写入2. 启动 部署前端1. 在项目根目录中创建Dockerfile文件写入2. 启动 准备工作 1. 准备传输软件 …

微信小程序错误----config is not defined

微信小程序出错 请求头发生错误 修改 options.header {// 为请求头对象添加 token 验证的 Authorization 字段Access-Token: token,platform: MP-WEIXIN,// 保留原有的 header...options.header,}

OpenGL ES (OpenGL) Compute Shader 计算着色器是怎么用的?

OpenGL ES (OpenGL) Compute Shader 是怎么用的? Compute Shader 是 OpenGL ES(以及 OpenGL )中的一种 Shader 程序类型,用于在GPU上执行通用计算任务。与传统的顶点着色器和片段着色器不同,Compute Shader 被设计用于在 GPU 上执行各种通用计算任务,而不是仅仅处理图形…

3.WEB渗透测试-前置基础知识-快速搭建渗透环境(上)

上一个内容:2.WEB渗透测试-前置基础知识-web基础知识和操作系统-CSDN博客 1.安装虚拟机系统 linux Kali官网下载地址: https://www.kali.org/get-kali/#kali-bare-metal Centos官网下载地址: https://www.centos.org/download/ Deepin官网下…