老师我问一个Generator 函数的问题

来源:

mario

2016-07-12

我已经跟到了最后一天的倒数第三节课了,收益颇多,越到后面我就想为什么老师要这么写,为什么老师要这么改代码,这不,我遇到了一个问题,想了好几天,就是生成器函数问题,也特意回去看了第二天的课程,发现老师讲的也不是特别清楚,我就去看别人写的文章,也懂了不少,不过还有一个问题我实在想不通,就特此开个帖问一下老师。

起初老师在中间件generator函数中yield后面跟的都是promise函数,这也是老师经常的处理方式方式

5784584300014d9d05000150.jpg

578458430001165005000341.jpg

然后我们就可以通过yield 将控制权讲给parseXMLAsync函数,然后再通过next(content)赋予左边的变量

http://szimg.mukewang.com/578459110001fe0f04700038.jpg

以上是第一种方式,还有一种方式是第七天教程中刚刚写到的就是下面这个

http://szimg.mukewang.com/578459bf0001ee5306340209.jpg

这个就是很多人说的thunk函数

http://szimg.mukewang.com/578459f20001324c06420074.jpg

yield右边函数返回的是一个带有回调函数的函数,因为可以在回调函数里,将执行权交还给 Generator 函数。

除次之外还可以接另外一个生成器函数比如

http://szimg.mukewang.com/57845b4f00011ee505220145.jpg

除此yield还可以接generator函数数组,对象

http://szimg.mukewang.com/57845c520001aa8a05360511.jpg

http://szimg.mukewang.com/57845c960001abb306160564.jpg

可是可是我不明白的是为什么yield可以接这个普普通通的函数,就是数据库查询

http://szimg.mukewang.com/57845d110001ca1d05300411.jpg

http://szimg.mukewang.com/57845d380001b0d204670054.jpg

在exec中只有普通的回调函数,它并不是thunk函数也不返回promise对象

难道koa会将这个转成promise对象,因为koa用的是co库,co现在都转成了promise,是这样理解吗

感觉自己钻牛角尖了,不过很希望搞明白这个

写回答

2回答

Scott

2017-04-24

是的,koa用的是co库,co 能内部处理好普通对象,promise 和 geneatorFunction

0
1
mario
非常感谢!
2017-05-29
共1条回复

mario

提问者

2017-05-29

老师你这回复快一年了哈哈哈

0
0

7天搞定Node.js微信公众号

Koa框架、ES2015新特性、MongoDB,开发微信公众号

1742 学习 · 787 问题

查看课程