产量在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/