2014-06-24 16 views
13

Un esempioUn modo per esportare una funzione generatore?

generator.js:

exports.read = function *(){ 
    var a = yield read('co.github.js'); 
    var b = yield read('co.recevier.js'); 
    var c = yield read('co.yield.js'); 
    console.log([a,b,c]); 
} 

function read(file) { 
    return function(fn){ 
    fs.readFile(file, 'utf8', fn); 
    } 
} 

co.js:

var co = require('co'); 
var fs = require('fs'); 
var gen = require('./generator') 
/*function read(file) { 
    return function(fn){ 
    fs.readFile(file, 'utf8', fn); 
    } 
}*/ 

co(gen.read)() 

Sembra che exports non supporta il funzionamento del generatore.

require, module, __filename, __dirname) { module.exports.read = function *(){ 
                     ^
SyntaxError: Unexpected token * 
at exports.runInThisContext (vm.js:69:16) 
    at Module._compile (module.js:432:25) 
    at Object.Module._extensions..js (module.js:467:10) 
    at Module.load (module.js:349:32) 
    at Function.Module._load (module.js:305:12) 
    at Function.Module.runMain (module.js:490:10) 
    at startup (node.js:123:16) 
    at node.js:1027:3 

perché voglio fare questo? Voglio solo separare i miei dati dai controller. Qualche modo per risolverlo?

+0

Non è questo errore che dice qualcos'altro? – putvande

+0

No. Sembra che la richiesta nel nodo non supporti il ​​generatore. – Tinple

+0

Qual è il * nella definizione della funzione? È javascript non valido, ovvero l'errore si sta lamentando di – slebetman

risposta

3

è possibile esportare tutto ciò che si desidera, ma per favore non esportare le funzioni del generatore nei moduli pubblici. i generatori sono gli hack del flusso di controllo. invece, tornare promesse con [email protected]

exports.fn = co.wrap(function*() { 
    return yield something() 
} 
2

È possibile utilizzare una variabile per memorizzare esso, ed esportarla in seguito:

var myGenerator = function *() { 
    // ... 
} 

module.exports = myGenerator; 

In un altro file, poi, si può require esso:

var myGen = require('./myfirstfile.js'); 
// myGen is now myGenerator from above 
Problemi correlati