产量在koa路由
我试图找出在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 ...
实际上意味着什么,为什么我不需要分配第二个收益的身体?
如果你偷看koa-send库,你会注意到这个 :
ctx.body = fs.createReadStream(path);
基本上,库是分配一个streamthis.body
,然后当你试图分配什么是通过调用yield send(this, 'file.html')
,这似乎是文件path和名称返回 ,你打破/覆盖图书馆正在尝试做的事情。
现在,如果你愿意,你可以select不使用koa-send
,而只需要这样做:
this.body = fs.createReadStream('file.html');
得到你的具体问题
this.body = yield ...
你可以在Promise / thunk / generator返回函数中调用yield(内部生成器),这些函数做一些asynchronous操作,暂停执行,直到asynchronous任务完成,然后在结果可用时重新启动函数。
我做了一个截屏,回想一下你可能会发现有用的JavaScript生成器:
http://knowthen.com/episode-2-understanding-javascript-generators/