Javascript 有没有办法导出生成器函数?
一个例子Javascript 有没有办法导出生成器函数?,javascript,generator,koa,co,Javascript,Generator,Koa,Co,一个例子 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
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);
}
}
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)()
co.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);
}
}
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)()
似乎导出
不支持生成器功能
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
我为什么要这么做?我只想把我的数据和控制器分开。有办法解决吗?您可以导出任何您想要的,但请不要导出公共模块中的生成器函数。生成器是控制流黑客。相反,用
co@4
exports.fn = co.wrap(function* () {
return yield something()
}
您可以使用变量存储它,然后再导出它:
var myGenerator = function *() {
// ...
}
module.exports = myGenerator;
然后,在另一个文件中,您可以require
it:
var myGen = require('./myfirstfile.js');
// myGen is now myGenerator from above
这可能是一个问题:
此外,我不会导出任何非对象的东西,特别是在ES6中,有类可供您使用。这不是说了别的错误吗?不是。节点中的require似乎不支持生成器。函数定义中的*是什么?这是无效的javascript——这就是错误所抱怨的ES6中定义的It’s generator函数。V8支持它。您是否使用--harmony标志?