对于yield的理解不佳,求帮忙梳理下代码

来源:4-2 第四天 封装消息响应模块

快要坏掉的小海

2016-05-05

http://szimg.mukewang.com/572b59f00001503e07190474.jpg


yield的理解不是很好,不是暂停后面的程序,然后需要调用next() 才能运行吗? 越理解越混,求大家帮我理理思路

还有最后的 call 理解也不好,谢谢大家,帮我理理思路

写回答

1回答

Scott

2016-05-06

generator 生成的对象存在一个 next 函数,的确是需要调用 next 才会返回 yield 运算的结果对象,并停止。再次调用 next, 会再次在下一个 yield 处停止,所以 yield util.parseXMLAsync 其实就是等于在这一行代码执行并停止了,不往下一行代码执行,除非调用 next,那么是哪只无形的手,老是帮我们调用这个 next 呢,明明我自己没有调用,这就是 koa 框架内部所做的事情,内部的流程控制是依赖于co,这个 co 的框架会负责把 next 一级一级调用下去,所以这块会一直执行下去。


至于 call,只不过重新定义函数的执行环境,也就是 this 的指向,把 handler 的 this 指向到了 this 当前的上下文,并且把 next 也作为参数交给 hander,所以在 hander 内部,因为 this 指向到了这里的 this, 才能够在 handler 里面通过 this.weixin 访问到这里处理后的 message

2
1
快要坏掉的小海
感谢老师的解答,豁然开朗
2016-05-06
共1条回复

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

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

1742 学习 · 787 问题

查看课程