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

function* gen() {

   const res = yield some();

   return res;

}


co(gen);

如上,some方法是否一定要返回一个Promise?


如果返回Promise,那么res为什么能得到数值而不是Promise实例?


慕侠2389804
浏览 747回答 1
1回答

富国沪深

是的。因为 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 执行器的源代码
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript