美文网首页
ES6——generator函数(一)

ES6——generator函数(一)

作者: 向上而活 | 来源:发表于2020-06-20 11:44 被阅读0次

    生成器,用于解决异步深度嵌套的问题(过渡期的产物,没有async好用,koa 框架新版本不支持generator函数)

    function * show(){
        yield 'yangyi';
        yield '18';
        return '程序员'
    }
    let p=show();
    console.log(p.next());//{value: "yangyi", done: false}
    console.log(p.next());//{value: "18", done: false}
    console.log(p.next());//{value: "程序员", done: true}  这是已经是最后一个值了,所以done为true
    console.log(p);//输出一个对象
    
    image

    可以用for....of....循环遍历出generator函数中的内容,但是,得到的不是对象形式,而且return后的内容遍历不出来。

    for(let val of p){
        console.log(val);**//yangyi 18**
    }
    
    //也可以配合解构与扩展运算,访问内部东西,同样无法访问return后的东西:
    let [a,b,c]=p;
    console.log(a,b,c);//yangyi 18 undefined
    let [a,...c]=p;
    console.log(a,c);//yangyi ["18"]
    console.log(...p);//yangyi 18
    console.log(Array.from(p));//["yangyi", "18"]
    //generator函数与Promise对象相结合,解决异步,用的比较多
    function * gen(){
        let val=yield 'yang';
        yield axios.get(`https:\/\/api.github.com/users/${val}`);
    }
    
    let g1=gen();
    let username=g1.next().value;//指  let val=yield 'yang';
    console.log(username);//yang
    //把yield axios.get(`https:\/\/api.github.com/users/${val}`);变成一个promise对象
    let reqPromise=g1.next(username).value;
    reqPromise.then(res=>{
        console.log(res.data);
    })
    

    关于异步,解决方案:

    1.回掉函数

    2.事件监听

    3.发布/订阅

    4.Promise对象

    相关文章

      网友评论

          本文标题:ES6——generator函数(一)

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