对于yield的理解不佳,求帮忙梳理下代码
来源:4-2 第四天 封装消息响应模块
快要坏掉的小海
2016-05-05
yield的理解不是很好,不是暂停后面的程序,然后需要调用next() 才能运行吗? 越理解越混,求大家帮我理理思路
还有最后的 call 理解也不好,谢谢大家,帮我理理思路
写回答
1回答
-
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
212016-05-06
相似问题