zoukankan      html  css  js  c++  java
  • Generator 异步操作的同步化写法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Generator 异步操作的同步化写法</title>
    </head>
    <body>
    <script>
        function getData(resolve){
            setTimeout(()=>{
                var data = {
                    id: '001'
                };
            resolve(data);
        }, 2000);
        }
    
        function getData2(data){
            setTimeout(()=>{
                console.log('Promise:' + data.id);
        }, 3000)
        }
        var promise = new Promise(getData);
        promise.then(getData2);
    
        //Generator函数的暂停执行的效果,意味着可以把异步操作写在yield语句里面,等到调用next
        // 方法时再往后执行。这实际上等同于不需要写回调函数了,因为异步操作的后续操作可以放
        // 在yield语句下面,反正要等到调用next方法时再执行。所以,Generator函数的一个重要实
        // 际意义就是用来处理异步操作,改写回调函数。
        //Promise的写法的缺点就是各种promise实例对象跟一连串的then,代码量大、行数多,满眼
        // 的promise、then、resolve看得头晕,而且每一个then都是一个独立的作用域,传递参数痛苦。
        function request(myData) {
            setTimeout(()=>{
                var data = {
                    id: myData
                };
                it.next(data);
            }, 1000);
        }
    
        function* ajaxs() {
           var data = yield request('001');
            var data2 = yield request(data.id);
            var data3 = yield request(data2.id);
            console.log('Generator:' + data3.id);
        }
        var it = ajaxs();
        it.next();
    
    </script>
    </body>
    </html>


  • 相关阅读:
    进程、线程、协程
    C++内存模型
    动态库dll与静态库lib
    virtual 虚函数表
    C++面试随笔
    alloc()、malloc()、calloc()、realloc()区别及用法
    C/C++ 面试题记录
    VC底层钩子程序在Win7/Vista下无效
    JMeter安装之后修成中文版
    明天开始 新的旅程
  • 原文地址:https://www.cnblogs.com/xutongbao/p/9924962.html
Copyright © 2011-2022 走看看