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>


  • 相关阅读:
    GUID
    Castle学习笔记二:框架结构及配置
    Linux编程基础
    Linux文件编程
    单臂路由配置实例
    CCNA学习笔记#02第7章操作与配置Cisco IOS
    Linux基本命令
    Linux系统中rar、unrar命令安装和使用详解
    批处理设置IP与DNS服务器
    Linux下载安装5笔输入法
  • 原文地址:https://www.cnblogs.com/xutongbao/p/9924962.html
Copyright © 2011-2022 走看看