1.Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。

语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。形式上,Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield表达式,定义不同的内部状态(yield在英语里的意思就是“产出”)。

2.长轮询:客户端向服务器发送Ajax请求,服务器接到请求后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

相关文章:

  • 2021-08-21
  • 2022-02-20
  • 2022-12-23
  • 2021-10-13
  • 2021-08-15
猜你喜欢
  • 2021-11-09
  • 2021-09-14
  • 2022-12-23
  • 2021-12-16
  • 2021-08-06
  • 2021-08-28
  • 2021-06-15
相关资源
相似解决方案