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) }
  • 相关阅读:
    tomcat项目部署后,无法弹出浏览器窗口,IDEA控制台如何快速找到错误日志
    导入新的jar包后,提示ClassNotFoundException 怎么解决?
    Vue is not defined
    next(),nextLine(),nextInt的区别
    Properties类与流的相关方法,properties的键与值都应该是字符串
    Java并发编程从入门到精通
    Java并发编程从入门到精通
    Java并发编程从入门到精通
    Java并发编程从入门到精通
    Java并发编程从入门到精通
  • 原文地址:https://www.cnblogs.com/Byme/p/7763703.html
Copyright © 2011-2022 走看看