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 ...
随机推荐
- Hibernate 再接触 关系映射 一对一双向外键关联
凡是双向关联必设mapped by 由对方主导 wifi.java package com.bjsxt.hibernate; import javax.persistence.Entity; imp ...
- Executors与ThreadPoolExecutor
最近阿里发布的 Java开发手册中强制线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗 ...
- async.waterfall
[async.waterfall] if any of the tasks pass an error to their own callback, the next function is not ...
- Bootstrap Tooltip
[Bootstrap Tooltip] 1.设置Tooltip: 1)data-toggle="tooltip" 2)data-placement="top", ...
- javascript学习笔记(八):浏览器对象
window对象 <!DOCTYPE html> <html> <head lang="en"> <meta chaset="U ...
- 项目没有build path问题(转)
感谢作者分享:https://blog.csdn.net/u012572815/article/details/76353018 问题1.通过eclipse的svn资源库添加的项目,显示的方式和直接创 ...
- Java 日期时间 Date类型,long类型,String类型表现形式的转换
Java 日期时间 Date类型,long类型,String类型表现形式的转换 1.java.util.Date类型转换成long类型 java.util.Date dt = new Date(); ...
- Struts2学习资料
Struts2入门示例教程 http://blog.csdn.net/wwwgeyang777/article/details/19078545 Struts2工作原理 http://blog ...
- 【selenium+python】关于使用selenium时的几个问题1
问题:selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in ...
- overflow属性的用法
<style type="text/css">div{ background-color:#00FFFF; width:150px; height:150px; ove ...