ES6 Generator的应用场景
一、基础知识
ES6 诞生以前,异步编程的方法,大概有下面四种。
- 回调函数
- 事件监听
- 发布/订阅
- Promise 对象
Generator 函数将 JavaScript 异步编程带入了一个全新的阶段。
二、应用场景
1.比如抽奖环节,当前用户还可以抽奖5次。点击后次数减1。
若采用ES5的方式,不使用Generator,则需要将count存入全局变量中,但是这样非常不安全,如果别人知道变量是什么,就可以修改变量;另外存入全局变量也会影响性能。
{
let draw=function(count){
//具体抽奖逻辑,跟次数的校验是分开的
//输出剩余次数
console.log(`剩余${count}次`)
}
//利用Generator控制次数
let residue=function*(count){
while(count>0){
count--
yield draw(count)
}
}
//将Generator实例化,通过按钮绑定,点击执行next,进行抽奖
let star=residue(5)
let btn=document.createElement('button')
btn.id='start'
btn.textContent='抽奖'
document.body.appendChild(btn)
document.getElementById('start').addEventListener('click',function(){
star.next()
},false)
}
2.长轮询
场景:服务端的某一个数据状态定期变化,前端需要定时的去服务端取这个状态
对于这种场景,有两种解决方案
1)长轮询(定时器,定时访问接口)
2)websocket(浏览器兼容性不好)
{
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
...
ES6 Generator的应用场景的更多相关文章
- es6 generator函数的异步编程
es6 generator函数,我们都知道asycn和await是generator函数的语法糖,那么genertaor怎么样才能实现asycn和await的功能呢? 1.thunk函数 将函数 ...
- ES6 Generator vs ES6 async/await
ES6 Generator vs ES6 async/await next yield promise refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允 ...
- es6 --- Generator 函数
第一部分,ES6 中的 Generator 在 ES6 出现之前,基本都是各式各样类似Promise的解决方案来处理异步操作的代码逻辑,但是 ES6 的Generator却给异步操作又提供了新的思路, ...
- es6 generator函数
es6 新增了Generator函数,一种异步编程的解决方案 回顾一下,es6 提供了新的遍历方法,for of ,适用于各种数据集合,统一了遍历操作,原生支持for of 集合的数据集合有.数组,字 ...
- ES6 Symbol的应用场景
一.简介 具体使用请参考:API ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值.它是 JavaScript 语言的第七种数据类型,前六种是:undefined.null.布尔值(B ...
- ES6 Proxy的应用场景
一.相关API Proxy Reflect 二.Proxy应用场景 1.数据校验 表单提交的时候做数据校验,例如年龄是不是满足条件,数据类型是不是满足要求等等,这场场景非常适合使用Proxy. 下面展 ...
- ES6 Generator async
Generator 函数是 ES6 提供的一种异步编程解决方案 async 函数使得异步操作变得更加方便,是 Generator 函数的语法糖. js单线程的原因是:避免DOM渲染冲突! 更新:201 ...
- ES6 Generator 学习笔记一
Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同. Generator 函数有多种理解角度.从语法上,首先可以把它理解成,Generator 函数是一个状态机 ...
- ES6 generator 基础
参考文档 harmony:generators Generator是ES6的新特性,通过yield关键字,可以让函数的执行流挂起,那么便为改变执行流程提供了可能. 创建Generator functi ...
随机推荐
- (转)NHibernate+MySql常见问题
http://blog.51cto.com/4837471/1567675 版本: NHibernate :NHibernate 4.0.1GA MySql:MySql 5.0.1 常见问题一: “N ...
- C# 监测每个方法的执行次数和占用时间(测试1)
在Nuget引用 Castle.DynamicProxy 和 Newtonsoft.Json 这个 原文:http://www.cnblogs.com/RicCC/archive/2010/03/15 ...
- 吴裕雄 23-MySQL ALTER命令
当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令.开始本章教程前让我们先创建一张表,表名为:testalter_tbl. create table testalter ...
- tomcat 修改jdk版本号
set JAVA_OPTS=-Djute.maxbuffer=2048000 set console_log=true set CATALINA_OPTS=-server -Xdebug -Xnoag ...
- python中的matplotlib的一些基础用法
#绘制折线图或者散点图plot import matplotlib.pyplot as pyl import numpy as npy x = [1,2,3,4,8] y = [5,7,2,1,5] ...
- python添加到环境变量
1.命令 vi ~/.bashrc export PATH="/home/tiany/software/python/python3/3.6.1/bin:$PATH" export ...
- mysql5.7.10开启慢查询
MySql提供慢SQL日志的功能,能够记录下响应时间超过一定阈值的SQL查询,以便于我们定位糟糕的查询语句. 首先,查询当前mysql数据库是否开启了慢查询日志功能: show VARIABLES l ...
- msf客户端渗透(六):抓包、搜索文件、破解弱口令、修改MACE时间
嗅探抓包 查看网卡 指定网卡,因为资源有限,默认抓满50000个包如果不dump下来,就会自动销毁掉,从0开始抓. dump嗅探到的文件到本机,传递到本机的过程是结果ssl加密的 dump了两个文件 ...
- JMeter一次简单的接口测试(转载)
转载自 http://www.cnblogs.com/yangxia-test 本次接口测试:根据ws查询所有商品的具体的信息.检查商品是否返回成功. 1. 准备测试数据 查询数据库中产品表已上架商 ...
- Mybatis学习链接
mybatis实战教程(mybatis in action),mybatis入门到精通 http://blog.csdn.net/techbirds_bao/article/details/923 ...