美文网首页
异步编程解决方案Generator

异步编程解决方案Generator

作者: 大吉的罐头 | 来源:发表于2021-03-18 16:08 被阅读0次
    语法 function* functionName(),yield
    //普通函数
    // function foo(){
    //     for(let i=0;i<3;i++){
    //         console.log(i);
    //     }
    // }
    // foo()
    
    //生成器函数 Generator函数 不能做为构造函数使用
    function* foo(){
        for(let i=0;i<3;i++){ 
            yield i    //yield只能直接在generator中使用
        }
    }
    let f = foo()
    //一步步手动进行 每次执行yield后面的代码
    console.log(f.next());  //{value: 0, done: false}
    console.log(f.next());  //{value: 1, done: false}
    console.log(f.next());  //{value: 2, done: false}
    console.log(f.next());  //{value: undefined, done: true}
    
    使用方法
    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()
    

    相关文章

      网友评论

          本文标题:异步编程解决方案Generator

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