账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于Generator的一点疑问
    • 昵称过于强大无法显示2018-10-11 00:00
    52
    0

    在学习js中generator/promise/async-await等知识时遇到了一个generator函数的问题:

    var fetch = require('node-fetch');
    
    function* gen(){
      var url = 'https://api.github.com/users/github';
      var result = yield fetch(url);
      console.log(result.bio);
    }

    这段代码描述了一个简单的generator的用法,使用时需要对next()函数获得的promise返回值多次then(),从而获取最终的json变量,传入第二个next()函数中。

    可以看到,代码中的result变量就是那个promise,而result.bio实际上是不存在,或者说不对的,
    应该是result.then(...).then(...).bio
    【Ⅰ不知我此处说的对不对?】

    所以关于generator的自动执行,使用async-await的方式,实际上是把对多个promise返回值进行获取(获取成功时的value)并最终传给下一个next()函数。而generator函数内容中yield之后的部分对yield语句的值(上述代码中的result)的使用,其实就是把他替换成了这个最终的value来使用。
    【Ⅱ不知我此处说的对不对?】

    最后,generator以及async-await的使用,其实就是将本是异步的promise.then()函数转换成同步的。
    【Ⅲ不知我此处说的对不对?】

    不知我的理解有没有问题。
    如果有更好的理解方式或是相关文章,也感谢说明或指明。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部