一个很好的个人网站开发,用dw做网站的教程,建设婚恋网站基本功能有哪些,专业网站建设课程一、function*
概念简介#xff1a;function* - JavaScript | MDN (mozilla.org)
function* 声明创建一个绑定到给定名称的新生成器函数。生成器函数可以退出#xff0c;并在稍后重新进入#xff0c;其上下文#xff08;变量绑定#xff09;会在重新进入时保存。
1.1 y…一、function*
概念简介function* - JavaScript | MDN (mozilla.org)
function* 声明创建一个绑定到给定名称的新生成器函数。生成器函数可以退出并在稍后重新进入其上下文变量绑定会在重新进入时保存。
1.1 yield
yield 关键字用于暂停和恢复生成器函数。MDNyield - 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长轮询定时器定时访问接口
2websocket浏览器兼容性不好
3generator
{let ajaxfunction* (){yield new Promise(function(resolve,reject){setTimeout(function(){resolve({code:0})},200)})}let pullfunction(){let generatorajax()let stepgenerator.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自动化