Что означает звездочка (*) в определении функции JavaScript в рамках Koa?

Я знакомлюсь с Koa (http://koajs.com/). Многие примеры включают звездочку вместо имени функции. Например, в примере hello world есть:

var koa = require('koa');
var app = koa();

app.use(function *(){
  this.body = 'Hello World';
});

app.listen(3000);

Что означает эта звезда?


person jsalonen    schedule 02.05.2014    source источник
comment
Это функция генератора. Проверьте аналогичный ответ: stackoverflow.com/a/23285200/1140227   -  person George    schedule 02.05.2014
comment
h3manth.com/new/blog/2014/getting-started-with -koajs дает хорошее объяснение, это называется гармония: генераторы   -  person CoderDojo    schedule 02.05.2014


Ответы (1)


Обычно он создает «итератор», поэтому вы можете получать результаты по одному.
Аналогично ключевой работе yield C#.

Официальная информация

Пример

«Бесконечная» последовательность чисел Фибоначчи (несмотря на поведение около 2^53):

function* fibonacci() {
    let [prev, curr] = [0, 1];
    for (;;) {
        [prev, curr] = [curr, prev + curr];
        yield curr;
    }
}

Генераторы могут повторяться в циклах:

for (n of fibonacci()) {
    // truncate the sequence at 1000
    if (n > 1000)
        break;


  print(n);
}

Генераторы — это итераторы:

let seq = fibonacci();
print(seq.next()); // 1
print(seq.next()); // 2
print(seq.next()); // 3
print(seq.next()); // 5
print(seq.next()); // 8
person Amir Popovich    schedule 02.05.2014
comment
Эй, это круто - person Lightness Races in Orbit; 02.05.2014
comment
Это потрясающе, спасибо! Вы случайно не знаете, почему синтаксис *? Например. по какой причине вам нужно явно определить, что что-то является генератором? Например, в Python вам не нужно этого делать. - person jsalonen; 02.05.2014
comment
Извините, понятия не имею.. - person Amir Popovich; 02.05.2014
comment
Хотя это 100% правильный ответ, все еще не ясно, для чего используются генераторы в этом самом фрагменте кода - зачем нам нужен генератор для назначения this.body = 'Hello World?'; - person shabunc; 02.07.2014
comment
Я считаю, что в Python наличие оператора yield определяет, создали ли вы функцию или генератор. В Javascript это явно. - person Ryan; 21.12.2015
comment
Хороший обзор использования генераторов Коа можно найти по адресу blog.stevensanderson.com/2013/12/21/ - person Ryan; 21.12.2015