• 异步解决之Generator


    Generator

    1、 生成方式:

      function * fn1(){
            let obj = yield '第一条测试数据'
            let obj1 = yield '第二条数据'
            return '测试完over!'
      }
    
      fn1.next()    //使用 
    

    传递参数

      fn1.next(name:'qiang');
      这个参数上传给上一个yiel关键字的返回值。     
    

    实战!

       function* initData() {
              let categoryList = yield getShopCategory();
              let goods = yield getGoods(categoryList[0].id)
              let comment = yield getComment(goods[0].id);
              return comment;
          }
      
          let gen = initData();
          gen.next().value.then(res => {
              gen.next(res).value.then(res => {
                  gen.next(res).value.then(res => {
                      // console.log(gen.next(res).value);
                      gen.next(res);
                  })
              })
          })
    

    由于过程比较繁琐一直调用then()方法。所以进行了优化

      编写一个执行器,去递归调用执行。
      //执行器
      function run() {
              let lt = gen();
              //递归调用
              return new Promise((resolve, reject) => {
    
                  function step(data) {
                      if (data.done) {
                          console.log('执行over');
                      } else {
                          data.value.then(res => {
                              step(lt.next(res));
    
                          })
                   }
                  }
                  step(lt.next());
              })
          }   
    

    这也是async/await的实现原理

  • 相关阅读:
    性能测试中的2-5-8原则
    Word2007页面排版
    博客备份专家--豆约翰
    TIOBE[ti'ɔbi]编程语言排行榜
    gif动画录制器LICEcap
    巧用输入法
    gitlab/github如何跳转页面
    Get和Post区别【boss面试集锦】
    带你了解直播流媒体
    直播+音视频行业相关
  • 原文地址:https://www.cnblogs.com/qianqiang0703/p/13606430.html
Copyright © 2020-2023  润新知