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 执行器的源代码
添加回答
举报
0/150
提交
取消