【问题标题】:yields in koa routingkoa 路由的收益
【发布时间】:2015-09-24 07:07:34
【问题描述】:

我正在尝试找出在 koa 路由中使用 yield 的方法。

举个例子,

router.get('/data', function *(next) {
    this.body = yield someData;
});

如果我想发送一个静态文件,我可以像这样使用 koa-send :-

router.get('/data', function *(next) {
    yield send(this, 'file.html');
});

但是,如果我将第二个收益分配给 this.body,它就不起作用。

那是什么

this.body = yield ...

实际上是什么意思,为什么我不需要将第二个 yield 分配给 body?

【问题讨论】:

    标签: node.js koa


    【解决方案1】:

    如果您查看 koa-send 库,您会注意到 this

    ctx.body = fs.createReadStream(path);
    

    基本上,库将流分配给this.body,然后当您尝试分配通过调用yield send(this, 'file.html')(似乎是文件path and name)返回的内容时,您正在破坏/覆盖库的内容正在尝试做。

    现在,如果您愿意,您可以选择不使用 koa-send,而直接这样做:

    this.body = fs.createReadStream('file.html');
    

    解决您的具体问题

    this.body = yield ...
    

    您在 Promise/thunk/generator 返回函数上调用 yield(内部生成器),这些函数执行异步操作,这会暂停函数中的执行,直到异步任务完成,然后在结果可用时重新启动函数。

    不久前我制作了一个关于理解 JavaScript 生成器的截屏视频,您可能会觉得有帮助:

    http://knowthen.com/episode-2-understanding-javascript-generators/

    【讨论】:

      猜你喜欢
      • 2021-06-29
      • 1970-01-01
      • 2019-03-26
      • 2020-10-09
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2016-05-02
      相关资源
      最近更新 更多