Любой способ экспортировать функцию генератора?
Пример
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
Почему я хочу это сделать? Я просто хочу отделить свои данные от контроллеров. Любой способ его решить?
Ответы
Ответ 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
Ответ 3
Это может быть проблемой:
Консоль NodeJS СинтаксисError: Неожиданный токен * для генератора
Кроме того, я бы не экспортировал ничего, что не является объектом, особенно в ES6, имеющем классы в вашем распоряжении.