2015-04-20 12 views
6

Non riesco a creare un metodo generatore come oggetto letterale.Esiste un modo per specificare il metodo del generatore ES6 nell'oggetto letterale in node.js?

Ecco il mio codice sorgente di lavoro:

function *getRecords (data) { 
    for (var i = 0; i < data.length; i++) { 
     yield data[i]; 
    } 
} 
var records = getRecords(data); 
for (var record of records) { 
    // process my record 
} 

Ma quando muovo il mio metodo generatore in oggetto letterale:

var myobj = { 
    *getRecords: function (data) {...} 
} 

ottengo SyntaxError: Unexpected token *

Se aggiungo citazioni

var myobj = { 
    '*getRecords': function (data) {...} 
} 

ottengo: SyntaxError: Unexpected strict mode reserved word

che sto runnng nodejs v0.12.2 con --harmony opzione, ma non importa quello che faccio, io non riesco a farlo funzionare.

risposta

7

Il * dovrebbe essere dopo la parola chiave function, come questo

var myobj = { 
    getRecords: function* (data) {} 
} 

for (var record of myobj['getRecords']()) {} 

Citando le Draft version of ECMA Script - 6's definition for Generator Expression,

funzione * (FormalParameters [Yield, GeneratorParameter]) {

GeneratorBody

}

Nota: Generatore espressione è diversa da generatore di funzioni. Quando lo assegni a una variabile o lo associ a una chiave in Object letteral, stai effettivamente assegnando un'espressione di generatore. La dichiarazione generatore normale sarà così

function * GeneratorFunctionName(...) { 
} 
+0

Come rendere generatore nella classe {} '' sintassi? Non c'è nessuna parola chiave 'function' in quella sintassi. – Finesse

8

Un @thefoureye già risposto, se si utilizza espressioni di funzione, allora si dovrà posizionare il * token giusto dopo la function token.

Tuttavia, è anche possibile utilizzare le definizioni del metodo nei letterali degli oggetti. Qui, ci si posiziona il * prima del nome del metodo generatore di effetti, ma come per ogni definizione di un metodo che non contiene i due punti e la parola chiave function:

var myobj = { 
    *getRecords(data) { 
     … 
    } 
}; 
1

Ecco come farlo in definizione dell'oggetto pianura:

var myobj = { 
    getRecords: function* (data) {...} 
} 

Ecco come farlo in ES6 definizione di classe:

class MyClass { 
    * getRecords(data) {...} 
} 
var myobj = new MyClass(); 
Problemi correlati