美文网首页
(二)22.Generator19-08-16

(二)22.Generator19-08-16

作者: 你坤儿姐 | 来源:发表于2019-11-03 17:44 被阅读0次
{
  //generator的基本定义
  //创建一个generator函数
  let tell=function* () {
    yield 'a';
    yield 'b';
    return 'c'
  };

  let k=tell();

  console.log(k.next());
  console.log(k.next());
  console.log(k.next());
  console.log(k.next());
}

{
  //generator也可以做遍历器的返回值

  let obj={};
  obj[Symbol.iterator]=function* (){
    yield 1;
    yield 2;
    yield 3;
  }

  for(let value of obj){
    console.log('value',value);
  }
}

{
  //什么时候generator函数有着最大的优势呢

  //状态机 可以不断地获取当前的状态
  let state=function* (){
    while (1){
      yield 'A';
      yield 'B';
      yield 'C';
    }
  }
  let status=state();
  console.log(status.next());
  console.log(status.next());
  console.log(status.next());
  console.log(status.next());
  console.log(status.next());
}

// {
//   //async用法   想要执行需要安装一些插件
//   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}次`)
  }

  //写一个generator函数
  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)
}
{
  //长轮询
  let ajax=function* () {
    yield new Promise(function(resolve,reject) {
      setTimeout(function () {
        resolve({code:0})
      },200)
    })
  }

  let pull=function(){
    let generator=ajax();
    let step=generator.next();
    step.value.then(function(d){
      if(d.code!=0){
        setTimeout(function () {
          console.log('wait');
          pull()
        },1000);
      }else {
        console.log(d);
      }
    })
  }
  pull();
}

相关文章

  • (二)22.Generator19-08-16

  • 二(二)

    发什么神经 突然就很想花钱 一边心疼 一边毫不在乎的花 啧 莫名其妙

  • 二,二

    2017.9.11教师节后的周一,第一次走进教室,刚站到讲台两个小可爱送给我两束花,原谅我那时候人还没有认全没有记...

  • 二〇二〇

    本来这篇小结打算年初写的,但是想想后边还有复试就先放一放,结果复试结束后过了两个月才想起要写这篇小结... 时过境...

  • 二金二木二火二土

    今天看完了极简中国史,这本书看了半个多月,因为是八十年前写的书,不是白话文,所以看的特别累。不过从近代前辈的角度去...

  • 说二『似二非二的二』

    说实话原以为他最多似二,生活小节或许专门学着似二,中枢神经应该不至于非二,没想到最近越来越疯狂地绞尽脑汁地朝着二的...

  • 二胎(二)

    今天宝宝三十周了,还有十周你就要出来了,也许会提前,妈妈和家人都很期待。 到了孕晚期,睡觉是个问题,左睡右睡都不对...

  • 二小姐(二)

    我去了李家,那环境好,夫人老爷小姐都很和蔼,我正坐在由木头和瓷做的椅子上,正等待着女管家来接我,我人生地不熟...

  • 二、递归(二)

    一、棋盘分割问题 【每次切完一个棋盘,就是需要舍弃掉一面,只能在一面操作】

  • 二选二

    既然已经分手了,那就应该正视我们的故事。待成熟睿智的甘露填补满年少轻狂的洼壑,你再回过头来,促膝把酒花前月下也能...

网友评论

      本文标题:(二)22.Generator19-08-16

      本文链接:https://www.haomeiwen.com/subject/teqqsctx.html