1.Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。
语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。形式上,Generator 函数是一个普通函数,但是有两个特征。一是,function
关键字与函数名之间有一个星号;二是,函数体内部使用yield
表达式,定义不同的内部状态(yield
在英语里的意思就是“产出”)。
2.长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
优点:在无消息的情况下不会频繁的请求,耗费资源小。
缺点:服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护。
实例:WebQQ、Hi网页版、Facebook IM。
3.Generator函数实现长轮询
{ // 长轮询 let ajax = function* (){ yield new Promise((resolve, reject) => { setTimeout(function () { // 模拟ajax调接口 resolve({code: 0}) }, 200) }) }; let pull = function(){ let generator = ajax(); let step = generator.next(); step.value.then(res => { // step.value是一个Promise对象 if(res.code !== 0){ setTimeout(function () { console.log('wait...'); pull() }, 1000) }else{ console.log(res); // {code: 0} } }) }; pull(); }
4.备注
参考:http://es6.ruanyifeng.com/#docs/generator