2014-06-24 34 views
13

Bir örnekBir jeneratör işlevini dışa aktarmanın herhangi bir yolu var mı?

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)() 

O exports jeneratör işlevi desteklemez görünüyor.

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 

Bunu neden yapmak istiyorum? Sadece verilerimi Controllers'den ayırmak istiyorum. Çözmenin herhangi bir yolu var mı?

+0

başka bir şey söyleyerek hata değil midir? – putvande

+0

Hayır. Düğümdeki gereksinim jeneratöre destek vermiyor gibi görünüyor. – Tinple

+0

fonksiyon tanımında * nedir? Bu geçersiz javascript var - Hata ES6 tanımlanan yaklaşık – slebetman

cevap

3

ne istersen dışa aktarabilir, ancak kamu modüllerde jeneratör işlevleri vermek etmeyiniz. jeneratörler kontrol akış hackleridir. Bunun yerine, [email protected]

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

ile sözler dönmek Bunu saklamak için bir değişken kullanın ve sonrasında dışa aktarabilirsiniz:

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

module.exports = myGenerator; 

başka dosyada, daha sonra, bunu require edebilirsiniz:

var myGen = require('./myfirstfile.js'); 
// myGen is now myGenerator from above 
İlgili konular