2015-09-24 4 views
1

Я пытаюсь выяснить использование урожая в маршрутизации koa.доходность в маршрутизации koa

в качестве примера,

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

Если бы я хотел послать статический файл, я мог бы использовать КоА-отправить так: -

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

Однако, если я назначить 2-й выход к этому .body, это не работает.

так что делает

this.body = yield ... 

на самом деле означает, и почему бы мне не нужно назначить 2-й выход к телу?

ответ

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

Вы называете выход (внутри генераторов) на функции возврата Promise/thunk/generator, которые делают что-то асинхронное, что приостанавливает выполнение функции до тех пор, пока асинхронные задачи не будут завершены, а затем перезапустит функцию, когда результат будет доступен.

Я сделал скринкаст некоторое время назад на понимание генераторов JavaScript, которые могут оказаться полезными:

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

Смежные вопросы