web-dev-qa-db-fra.com

Que signifie `return function * () {...}`?

J'ai vu quelque chose d'étrange dans Koa . Il a de nouveaux noms de fonctions (de https://github.com/koajs/koa/blob/master/examples/co.js#L1 ):

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('');
  }
});

Que signifie return function *()? Pouvons-nous déclarer une fonction avec le nom de * En JavaScript?

57
Afshin Mehrabani

Cela signifie que la fonction renvoie un itérateur (donc il peut être appelé à plusieurs reprises avec .next () pour donner plus de valeurs.

consultez http://wingolog.org/archives/2013/05/08/generators-in-v8 pour plus d'informations

C'est une construction ES6, donc pour le moment vous la voyez plus dans le nœud plutôt que dans le côté client js

34
benjaminbenben

Koa utilise une nouvelle fonctionnalité JavaScript appelée générateurs, et le * est le moyen d'identifier un générateur dans V8.

18
Luc Morin