2015-09-24 50 views
1

我試圖找出在koa路由中產量的使用。在koa路由中的產量

爲例,

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

如果我想送一個靜態文件,我可以用KOA-發送類似這樣: -

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

但是如果我的第二個產量分配到該.body,它不起作用。

那麼,是什麼

this.body = yield ... 

實際上意味着,爲什麼不讓我需要分配第二產的身體?

回答

3

如果你偷看相思樹,發送庫中,你會發現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 ... 

你調用yield(內發電機)在Promise/thunk/generator返回執行異步操作的函數時,會暫停函數中的執行,直到完成異步任務,然後在結果可用時重新啓動函數。

我做了截屏前陣子在理解JavaScript的發電機,你可能會發現有用:

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