Има ли начин за експортиране на генераторна функция?

Пример

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

Изглежда, че exports не поддържа функция генератор.

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

Защо искам да направя това? Просто искам да отделя данните си от администраторите. Има ли начин да го решим?


person Tinple    schedule 24.06.2014    source източник
comment
Тази грешка не казва ли нещо друго?   -  person putvande    schedule 24.06.2014
comment
не Изглежда изискването в възела не поддържа генератор.   -  person Tinple    schedule 24.06.2014
comment
Какво е * в дефиницията на функцията? Това е невалиден javascript - за което се оплаква грешката   -  person slebetman    schedule 24.06.2014
comment
Това е генераторна функция, дефинирана в ES6. V8 го поддържа.   -  person Tinple    schedule 24.06.2014
comment
Използвате ли флаг за --harmony?   -  person esp    schedule 29.06.2015


Отговори (3)


Можете да използвате променлива, за да го съхраните и след това да го експортирате:

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

module.exports = myGenerator;

След това в друг файл можете да require го:

var myGen = require('./myfirstfile.js');
// myGen is now myGenerator from above
person nha    schedule 22.01.2016

можете да експортирате каквото искате, но моля, не експортирайте генераторни функции в публични модули. генераторите са хакове за управление на потока. вместо това върнете обещания с co@4

exports.fn = co.wrap(function* () {
  return yield something() 
}
person Jonathan Ong    schedule 07.12.2014

Това може да е проблемът:

NodeJS конзола SyntaxError: Неочакван токен * за генератор

Освен това не бих експортирал нищо, което не е обект, особено в ES6 с класове на ваше разположение.

person Leonardo Del Gesso    schedule 13.07.2016