zoukankan      html  css  js  c++  java
  • es6 语法 (Generator)

    
    
    {
      // 长轮询
      let ajax=function* (){
        yield new Promise(function(resolve,reject){
          setTimeout(function () {
            resolve({code:0})
          }, 200);
        })
      }
    
      let pull=function(){
        let genertaor=ajax();
        let step=genertaor.next();
        step.value.then(function(d){//step.value就是promise实例
          if(d.code!=0){
            setTimeout(function () {
              console.info('wait');
              pull()
            }, 1000);
          }else{
            console.info(d);
          }
        })
      }
    
      pull();
    }
    
    
    
    Generator 函数是协程在 ES6 的实现,最大特点就是可以交出函数的执行权(即暂停执行)
    参考链接:
    http://www.ruanyifeng.com/blog/2015/04/generator.html
    {
    // genertaor基本定义 有一个星号有一个yield let tell = function*() { yield 'a'; yield 'b'; return 'c' }; let k = tell(); console.log(k.next()); // {value: "a", done: false} console.log(k.next()); // {value: "b", done: false} console.log(k.next()); // {value: "c", done: false} console.log(k.next()); // {value: undefined, done: true} } { let obj = {}; obj[Symbol.iterator] = function*() { yield 1; yield 2; yield 3; } for (let value of obj) { console.log('value', value); // 1 2 3 } } { let state = function*() { while (1) { yield 'A'; yield 'B'; yield 'C'; } } let status = state(); console.log(status.next()); //{value: "A", done: false} console.log(status.next()); //{value: "B", done: false} console.log(status.next()); //{value: "C", done: false} console.log(status.next()); //{value: "A", done: false} console.log(status.next()); //{value: "B", done: false} } // { //需要一些插件才能实现,结果跟上面一样 // let state=async function (){ // while(1){ // await 'A'; // await 'B'; // await 'C'; // } // } // let status=state(); // console.log(status.next()); // console.log(status.next()); // console.log(status.next()); // console.log(status.next()); // console.log(status.next()); // } { let draw = function(count) { //具体抽奖逻辑 console.info(`剩余${count}次`) } let residue = function*(count) { while (count > 0) { count--; yield draw(count); } } let star = residue(5); //次数后台传 let btn = document.createElement('button'); btn.id = 'start'; btn.textContent = '抽奖'; document.body.appendChild(btn); document.getElementById('start').addEventListener('click', function() { star.next(); }, false) }
  • 相关阅读:
    航班预定统计(差分数组+前缀和)
    救生艇
    Xcode 的正确打开方式——Debugging
    多次页面跳转后pop回主界面的问题
    理解Bitcode:一种中间代码
    使用AFNetWorking读取JSON出现NSCocoaErrorDomain Code=3840的解决方法
    No identities are available for signing的解决方法
    Aufree/trip-to-iOS
    Alcatraz -- 一个神奇的管理插件的Xcode插件
    GenericKeychain
  • 原文地址:https://www.cnblogs.com/Byme/p/7763703.html
Copyright © 2011-2022 走看看