zoukankan      html  css  js  c++  java
  • es6(15)--generator

      1 //generator处理异步,下一步用next,遇到return或者yied就会停止
      2 {
      3     //generator基本定义
      4     let tell=function* (){
      5         yield 'a';
      6         yield 'b';
      7         return 'c'
      8     };
      9     let k=tell();
     10     console.log(k.next());
     11     console.log(k.next());
     12     console.log(k.next());
     13     console.log(k.next());
     14 }
     15 {
     16     let obj={};
     17     obj[Symbol.iterator]=function*(){
     18         yield 1;
     19         yield 2;
     20         yield 3;
     21     }
     22     for(let value of obj){
     23         console.log('value',value)
     24     }
     25 }
     26 {
     27     //状态机
     28     let state=function* (){
     29         while(1){
     30             yield 'A';
     31             yield 'B';
     32             yield 'C';
     33         }
     34     }
     35     let status=state();
     36     console.log(status.next());
     37     console.log(status.next());
     38     console.log(status.next());
     39     console.log(status.next());
     40 }
     41 //和上面一样,但是需要安装插件
     42 // {
     43 //     let state=async function(){
     44 //         while(1){
     45 //             await 'A';
     46 //             await 'B';
     47 //             await 'C';
     48 //         }
     49 //     }
     50 //     let status=state();
     51 //     console.log(status.next());
     52 //     console.log(status.next());
     53 //     console.log(status.next());
     54 //     console.log(status.next());
     55 // }
     56 {
     57     //抽奖次数限制
     58     let draw=function(count){
     59         //具体逻辑
     60         console.info(`剩余${count}次数`)
     61     }
     62 
     63     let residue=function* (count){
     64         while(count>0){
     65             count--;
     66             yield draw(count);
     67         }
     68     }
     69     let star=residue(5);
     70     let btn=document.createElement('button');
     71     btn.id='start';
     72     btn.textContent='抽奖';
     73     document.body.appendChild(btn);
     74     document.getElementById('start').addEventListener('click',function(){
     75         star.next();
     76     },false)
     77 }
     78 {
     79     //长轮询
     80     let ajax=function*(){
     81         yield new Promise(function(resolve,reject){
     82             setTimeout(function(){
     83                 resolve({code:0})
     84             },1000)
     85         })
     86     }
     87     let pull=function(){
     88         let generator=ajax();
     89         let step=generator.next();
     90         step.value.then(function(d){
     91             if(d.code!=0){
     92                 setTimeout(function(){
     93                     console.log('wait');
     94                     pull()
     95                 },1000);
     96             }else{
     97                 console.info(d);
     98             }
     99         })
    100     }
    101     pull();
    102 }
  • 相关阅读:
    『转』VC 工具使用和调试方法
    『轉』WINCE下如何实现发短信
    『转』Fatal error: Call to undefined function curl_init
    『转』WinCE驱动程序的分类
    『轉』Windows CE下的串口通讯类
    『轉』VC 6.0 “fatal error LNK1104: cannot open file "mfc42u.lib"”问题解决
    水晶报表乱码中文乱码问题(收藏)
    水晶报表如何完美导出一个Excel表格(收藏)
    ASP.NET AJAX(开发代号Atlas)重要参考资源大收集
    表格排序
  • 原文地址:https://www.cnblogs.com/chenlw/p/9227927.html
Copyright © 2011-2022 走看看