异步编程解决方案Generator

时间:2021-6-12 作者:qvyue
语法 function* functionName(),yield
//普通函数
// function foo(){
//     for(let i=0;i
使用方法
function* gen(x){
    let y=2*(yield(x+1))
    let z=yield(y/3)
    return x+y+z
}
let g = gen(5)
// console.log(g.next()); //{value: 6, done: false}  5+1=6
// console.log(g.next()); //{value: NaN, done: false}  没传参2*undefined
// console.log(g.next()); //{value: NaN, done: true}   NaN/3

console.log(g.next()); //{value: 6, done: false}  5+1=6
console.log(g.next(12)); //{value: 8, done: false}  2*12=24 24/3=8
console.log(g.next(13)); //{value: 42, done: true}  z=13 5+24+13=42
使用场景
//7或7的倍数
function* count(x=1){
    while(true){
        if(x % 7 ===0){
            yield x
        }
        x++
    }
}
let n=count()
console.log(n.next().value); //7 
console.log(n.next().value); //14
console.log(n.next().value); //21
console.log(n.next().value); //28
console.log(n.next().value); //35
解决callback hell
// function ajax(url,callback){...}
function request(url){
    ajax(url,res=>{
        getData.next(res)
    })
}
function* gen(){
    let res1=yield request('static/a.json')
    console.log(res1);
    let res2=yield request('static/b.json')
    console.log(res2);
    let res3=yield request('static/c.json')
    console.log(res3);
}
let getData=gen()
getData.next()
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。