浏览koa示例,文档和中间件,我注意到两种形式的yield
都被使用,没有任何特别的区别。最极端的情况是在koa-mount中,其中示例代码使用yield next;
形式,而包本身多次使用yield*
。其他包(例如koa-views)也使用yield next
形式。
我理解语言定义的这两种形式之间的区别,但不明白在koa上下文中它们是如何互换使用的,以及何时使用一种形式比另一种形式更正确。
<<h3>编辑29/5/h3>经过更多的研究,我明白了,因为koa是建立在co之上的,而co能够处理多种类型的异步结果(thks, Promises…),这是可能的都是合法的,但我仍然不确定什么指导方针有助于决定在每种情况下使用哪种形式。
这篇文章- yield next vs. yield* next,来自koa的一个团队成员,详细解释了这是什么以及他们为什么使用它。
在一些情况下,可以使用这个yield *
,如文章所示,以避免额外的co
调用,或者在生成时保持上下文(this
)。但话又说回来,这并不是真正需要的——正如作者所说,"为了避免混淆,我们不提倡使用"。