zoukankan      html  css  js  c++  java
  • es6- Generator函数实现长轮询

    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

  • 相关阅读:
    JavaScript函数之美~
    如何用iframe标签以及Javascript制作时钟?
    Hammer.js
    leadJS初构建
    SQLite-创建、附加、分离数据库
    Javascript异步编程的4种方法
    JavaScript的数组实现队列与堆栈的方法
    使用PHP创建一个REST API(译)
    HTTP API响应数据规范整理
    CMD 模块定义规范
  • 原文地址:https://www.cnblogs.com/codebook/p/10607236.html
Copyright © 2011-2022 走看看