为了账号安全,请及时绑定邮箱和手机立即绑定

用co库,yield 后面是否一定要返回一个 promise?

用co库,yield 后面是否一定要返回一个 promise?

慕侠2389804 2019-02-08 18:23:16
function* gen() {   const res = yield some();   return res;}co(gen);如上,some方法是否一定要返回一个Promise?如果返回Promise,那么res为什么能得到数值而不是Promise实例?
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

是的。因为 yield 后面语句的返回值,是做为 generator.next(data) 的返回值,而传入的参数 data 才是作为 yield 语句的返回值,这样设定才实现的协程的效果。通过 next 函数返回一个 Promise 对象,执行器(这里是 Co 模块)才能实现自动执行 generator 函数。大致思想如下:


var g = gen() 

// g.next() 执行了 yield 后面语句,并返回 Promise 对象

g.next().then(function (data) {

    // 将异步数据传入 next 函数,作为 yield 语句的返回值

    g.next(data)

})

详细信息可以看看阮一峰老师的 Es6 教程和 Co 执行器的源代码


查看完整回答
反对 回复 2019-02-12
  • 1 回答
  • 0 关注
  • 746 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信