56 votes

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

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

 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 signifient return function *() ? Peut-on déclarer une fonction avec le nom * en JavaScript?

34voto

benjaminbenben Points 926

Cela signifie que la fonction retourne un itérateur (elle peut donc être appelée à plusieurs reprises avec .next () pour générer davantage 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 les noeuds que dans le côté client js

18voto

Luc Morin Points 3243

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X