我正在尝试弄清楚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/