es6 语法 (Generator)
ES6 语法 Generator
2023-09-14 09:06:33 时间
{ // 长轮询 let ajax=function* (){ yield new Promise(function(resolve,reject){ setTimeout(function () { resolve({code:0}) }, 200); }) } let pull=function(){ let genertaor=ajax(); let step=genertaor.next(); step.value.then(function(d){//step.value就是promise实例 if(d.code!=0){ setTimeout(function () { console.info('wait'); pull() }, 1000); }else{ console.info(d); } }) } pull(); }
Generator 函数是协程在 ES6 的实现,最大特点就是可以交出函数的执行权(即暂停执行)
参考链接:
http://www.ruanyifeng.com/blog/2015/04/generator.html
{ // genertaor基本定义 有一个星号有一个yield let tell = function*() { yield 'a'; yield 'b'; return 'c' }; let k = tell(); console.log(k.next()); // {value: "a", done: false} console.log(k.next()); // {value: "b", done: false} console.log(k.next()); // {value: "c", done: false} console.log(k.next()); // {value: undefined, done: true} } { let obj = {}; obj[Symbol.iterator] = function*() { yield 1; yield 2; yield 3; } for (let value of obj) { console.log('value', value); // 1 2 3 } } { let state = function*() { while (1) { yield 'A'; yield 'B'; yield 'C'; } } let status = state(); console.log(status.next()); //{value: "A", done: false} console.log(status.next()); //{value: "B", done: false} console.log(status.next()); //{value: "C", done: false} console.log(status.next()); //{value: "A", done: false} console.log(status.next()); //{value: "B", done: false} } // { //需要一些插件才能实现,结果跟上面一样 // let state=async function (){ // while(1){ // await 'A'; // await 'B'; // await 'C'; // } // } // let status=state(); // console.log(status.next()); // console.log(status.next()); // console.log(status.next()); // console.log(status.next()); // console.log(status.next()); // } { let draw = function(count) { //具体抽奖逻辑 console.info(`剩余${count}次`) } let residue = function*(count) { while (count > 0) { count--; yield draw(count); } } 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) }
相关文章
- 《深入理解ES6》笔记—— JavaScript中的类class(9)
- JavaScript & 6小时了解ES6基本语法
- vue全家桶+axios+jsonp+es6 仿肤君试用小程序
- Sublime Es6教程2-基本语法
- [ES6] Use ES6 Proxies
- [ES6] Array -- Destructuring and Rest Parameters && for ..of && Arrat.find()
- [ES6] Object.assign (with defaults value object)
- [ES6] Array.findIndex()
- [ES6] 22. Const
- ES6 Promise 用法讲解
- [Javascript] Understand common misconceptions about ES6's const keyword
- [ES6] 04. The let keyword -- 2 Fiald case
- 使用ES6的fetch API读取数据时要注意的一个和cookie相关的坑
- Atitit 模板引擎总结 v4 saa 目录 1. 模板引擎1 1.1. 构成渲染引擎+指令系统1 1.2. 模板语法mustache语法 es6 el语法1 2. 常见模板步骤1 2.
- 关于 SAP WebIDE 不支持 ES6 语法的问题
- 利用ES6的Generator语法实现自定义iterator
- es6 语法 (iterator和for...of循环)
- es6 语法 (Promise)
- es6 语法 (解构赋值)
- ES6笔记--持续更新
- es6模块化开发
- 如何在Pycharm设置ES6语法环境
- 随笔-ES6 Symbol
- 随笔-ES6 class语法糖 及继承性实现