【问题标题】:When should I use yield and when yield* with Koa.js什么时候应该使用 yield 以及什么时候 yield* 和 Koa.js
【发布时间】:2015-08-08 01:08:48
【问题描述】:

浏览 koa 示例、文档和中间件,我注意到yield 的两种形式都在使用,我没有注意到任何特别的区别。最极端的情况是在koa-mount中,sample code使用yield next;形式,而包itself多次使用yield*。其他包(例如koa-views)也使用yield next 形式。

我了解语言定义的这两种形式之间的区别,但不明白在 koa 的上下文中它们是如何互换使用的,以及何时使用一种而不是另一种是正确的。

编辑 29/5

经过更多研究,我了解到由于 koa 是建立在 co 之上的,并且 co 能够处理多种类型的异步结果(thunk、Promises ......),因此两者都有可能是合法的,但我仍然不确定哪种指南有助于决定在每种情况下使用哪种形式。

【问题讨论】:

  • 呃,如果yield* 只在库内部使用,这不是很清楚吗?它们绝对不能互换使用。
  • @Bergi - 但它在相同的上下文中。 koa-mount 是一个和其他任何中间件一样的中间件。它在 github 上位于 koa 本身旁边的事实是无关紧要的。

标签: javascript node.js ecmascript-6 koa yield-keyword


【解决方案1】:

这篇文章 - yield next vs. yield* next ,来自 koa 的一位团队成员,准确解释了这是什么以及他们使用它的原因。

如文章所示,在某些情况下可以使用此yield *,以避免额外的co 调用,或在让步时保持上下文(this)。但话又说回来,它并不是真的需要 - 正如作者所说,“我们不提倡它以避免混淆”。

【讨论】:

    猜你喜欢
    • 2021-09-07
    • 2015-12-05
    • 2023-04-02
    • 2011-04-15
    • 2017-04-10
    • 2012-03-19
    • 2018-05-12
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多