当前位置: 首页 > news >正文

ES6生成器(Generator)

一、function*

概念简介:function* - JavaScript | MDN (mozilla.org)

function* 声明创建一个绑定到给定名称的新生成器函数。生成器函数可以退出,并在稍后重新进入,其上下文(变量绑定)会在重新进入时保存。

1.1 yield

yield 关键字用于暂停和恢复生成器函数。MDN:yield - JavaScript | MDN (mozilla.org)

1.2 yield*

yield* 表达式用于委托给另一个generator 或可迭代对象。MDN:yield* - JavaScript | MDN (mozilla.org)

二、function*的应用场景

2.1 Generator函数解决回调地狱(简单从网上扒个demo)

function one() {setTimeout(() => {console.log(1);iterator.next();}, 1000);
}function two() {setTimeout(() => {console.log(2);iterator.next();})
}function three() {setTimeout(() => {console.log(3);iterator.next();})
}function *gen() {yield one();yield two();yield three();
}let iterator = gen();
iterator.next();

2.2 长轮询(转载于:从零开始学_JavaScript_系列(58)——Thunk函数-CSDN博客)

 场景:服务端的某一个数据状态定期变化,前端需要定时的去服务端取这个状态

对于这种场景,有两种解决方案

1)长轮询(定时器,定时访问接口)

2)websocket(浏览器兼容性不好)

3)generator

{let ajax=function* (){yield new Promise(function(resolve,reject){setTimeout(function(){resolve({code:0})},200)})}let pull=function(){let generator=ajax()let step=generator.next()step.value.then(function(d){if(d.code!=0){setTimeout(function(){console.log('wait')pull()},1000)}else{console.log(d)}})}pull()
}

 输出结果为

{code: 0}

将resolve({code:0})中code改成1,会一直轮询,输出结果为

wait

wait

wait

...

文章中的Thunk介绍了如何Generator自动化

http://www.lryc.cn/news/324027.html

相关文章:

  • 大模型主流微调训练方法总结 LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning 并训练自己的数据集
  • 【No.13】蓝桥杯二分查找|整数二分|实数二分|跳石头|M次方根|分巧克力(C++)
  • 【蓝桥杯-单片机】基于定时器的倒计时程序设计
  • QT:三大特性
  • 无服务器推理在大语言模型中的未来
  • 【linux】CentOS查看系统信息
  • 部署dagu_1.12.10+replicadb0.15.1+sqlline1.12
  • 基于Java中的SSM框架实现社会保险管理系统项目【项目源码+论文说明】
  • 24计算机考研调剂 | 江西理工大学
  • Sentry(Android)源码解析
  • Android StateLayout状态页
  • JetBrains数据库驱动下载失败解决方法
  • 【vim 学习系列文章 16 -- vim 自动保存设置】
  • python的O2O生鲜食品订购flask-django-nodejs-php
  • 六、大模型-Prompt-API介绍
  • 嵌入式安全性基础知识-计算机系统安全知识+信息安全基础+网络安全协议-嵌入式系统设计师备考笔记
  • 基于javaSpringboot+mybatis+layui的装修验收管理系统设计和实现
  • jenkins构建完成后部署到本机,无法读取容器外文件夹
  • 如何使用 Elasticsearch 作为向量数据库
  • 高精度AI火灾烟雾检测算法,助力打造更加安全的楼宇环境
  • node和npm yarn包管理工具
  • 鸿蒙Harmony应用开发—ArkTS(@Link装饰器:父子双向同步)
  • 【数据结构】猛猛干7道链表OJ
  • 记录C++中,子类同名属性并不能完全覆盖父类属性的问题
  • 使用 ONLYOFFICE API 构建 Java 转换器,在 Word 和 PDF 之间进行转换
  • SpringCloudAlibaba Nacos配置及应用
  • #Linux(权限管理)
  • easyExcel复杂表头导出
  • 【大数据】五、yarn基础
  • 语义分割实战项目(从原理到代码环境配置)