我什么时候应该使用 yield 以及什么时候使用 yield* with Koa.js
When should I use yield and when yield* with Koa.js
浏览 koa 示例、文档和中间件,我注意到 yield
的两种形式都在使用,我注意到没有任何特别的区别。最极端的情况是在koa-mount中,其中sample code uses the yield next;
form, and the package itself uses yield*
several times. Other packages (koa-views例如)也使用yield next
形式。
我理解语言定义的这两种形式之间的区别,但不明白在 koa 的上下文中它们是如何互换使用的,以及何时使用一种而不是另一种是正确的。
编辑 29/5
经过更多的研究,我了解到,由于 koa 是建立在 co 之上的,并且 co 能够处理多种类型的异步结果(thunks,Promises ...),所以有可能两者都是 合法,但我仍然不确定什么准则有助于决定在每种情况下使用哪种形式。
这篇文章 - yield next vs. yield* next 来自 koa 的一位团队成员,准确解释了这是什么以及他们使用它的原因。
在某些情况下,可以使用此 yield *
,如文章所示,以避免额外的 co
调用,或在屈服时保持上下文 (this
)。但话又说回来,它并不是真的需要 - 正如作者所说,“我们不提倡它以避免混淆”。
浏览 koa 示例、文档和中间件,我注意到 yield
的两种形式都在使用,我注意到没有任何特别的区别。最极端的情况是在koa-mount中,其中sample code uses the yield next;
form, and the package itself uses yield*
several times. Other packages (koa-views例如)也使用yield next
形式。
我理解语言定义的这两种形式之间的区别,但不明白在 koa 的上下文中它们是如何互换使用的,以及何时使用一种而不是另一种是正确的。
编辑 29/5
经过更多的研究,我了解到,由于 koa 是建立在 co 之上的,并且 co 能够处理多种类型的异步结果(thunks,Promises ...),所以有可能两者都是 合法,但我仍然不确定什么准则有助于决定在每种情况下使用哪种形式。
这篇文章 - yield next vs. yield* next 来自 koa 的一位团队成员,准确解释了这是什么以及他们使用它的原因。
在某些情况下,可以使用此 yield *
,如文章所示,以避免额外的 co
调用,或在屈服时保持上下文 (this
)。但话又说回来,它并不是真的需要 - 正如作者所说,“我们不提倡它以避免混淆”。