node.js - koa 路由中的 yield

标签 node.js koa

我正在尝试弄清楚yield在koa路由中的使用。

举个例子,

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 ...

实际上的意思是,为什么我不需要将第二个产量分配给主体?

最佳答案

如果您查看 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/

关于node.js - koa 路由中的 yield ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32755368/

相关文章:

node.js - Node JS和 Mongoose 架构date.now代码无法正常工作

node.js - 从 Cloudinary 切换到 S3 - 无法上传

node.js - 如何使用 Koa 提供静态文件?

node.js - 为什么 koa-router 会发送 404?

node.js - $elemMatch 返回误报

html - Express.js 和 Node.js |渲染模板

javascript - webpack 前端和后端都可以工作吗?

node.js - Koa 上下文中协程和生成器的区别?

javascript - 马科和 Koajs : Why is my async-fragment rendering not working?