Generator

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:true}
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);
}
// value 1
// value 2
// value 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 draw = function(count){
    //具体抽奖逻辑
    console.log(`剩余${count}次数`)
}

let residue = function* (count){
    while(count>0) {
        count--;
        yield draw(count);
    }
}

let star = residue(5);
//页面加上button
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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值