2013-11-07 2 views
58

Я увидел что-то странное в Koa. Он имеет некоторые новые имена функций (от https://github.com/koajs/koa/blob/master/examples/co.js#L10):Что означает `return function *() {...}` mean?

app.use(function(){ 
    return function *(){ 
    var paths = yield fs.readdir('docs'); 

    var files = yield paths.map(function(path){ 
     return fs.readFile('docs/' + path, 'utf8'); 
    }); 

    this.type = 'markdown'; 
    this.body = files.join(''); 
    } 
}); 

Что return function *() значит? Можем ли мы объявить функцию с именем * в JavaScript?

ответ

34

Это означает, что функция возвращает итератор (так что он может быть повторно вызван с .next() с получением более значений.

выпиской http://wingolog.org/archives/2013/05/08/generators-in-v8 для получения дополнительной информации

Это построит ES6, так что в в тот момент, когда вы видите его скорее в узле, чем на стороне клиента js

+1

BTW, он доступен только в неустойчивом узле (> = 0.11) с флагом '--harmony-generatorators' –

18

Koa использует новую функцию JavaScript под названием генераторы, а * - это способ идентификации генератора в V8.

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

  • Нет связанных вопросов^_^