Подтвердить что ты не робот

Любой способ экспортировать функцию генератора?

Пример

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

Почему я хочу это сделать? Я просто хочу отделить свои данные от контроллеров. Любой способ его решить?

4b9b3361

Ответ 1

вы можете экспортировать все, что хотите, но, пожалуйста, не экспортируйте функции генератора в общедоступные модули. генераторы - это потоки управления. вместо этого верните promises с помощью [email protected]

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

Ответ 2

Вы можете использовать переменную для ее сохранения и экспортировать ее впоследствии:

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

module.exports = myGenerator;

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

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