何时在Koa.js中使用yield和yield*?

3
在浏览koa示例、文档和中间件时,我注意到两种形式的yield被使用,但是没有特别的区别。最极端的情况是在koa-mount中,示例代码使用了yield next;形式,而该软件包本身则多次使用了yield*。其他软件包(例如koa-views)也使用了yield next形式。
我理解语言定义的两种形式之间的区别,但是不明白在koa上下文中它们是如何可以互换使用的,以及在每种情况下使用哪种形式是正确的。
编辑29/5:
经过更多的研究,我了解到由于koa是建立在co之上的,而co能够处理多种类型的异步结果(thunks、Promises等),因此两种形式都是合法的,但我仍然不确定什么样的指导方针能够帮助决定在每种情况下使用哪种形式。

哦,如果 yield* 只在库内部使用,那不是很清楚吗?它们绝对不能互换使用。 - Bergi
@Bergi - 但它处于相同的上下文中。koa-mount像其他任何中间件一样。它与koa本身在github上的位置无关紧要。 - Amit
1个回答

6
这篇文章 - yield next vs. yield* next,由Koa团队成员撰写,详细解释了yield*的含义以及使用原因。
正如文章所述,有几种情况下可以使用yield *,例如避免额外的co调用或在yield时保留上下文(this)。但是作者也指出,这并不是必需的,"我们不建议使用它以避免混淆"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接