Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法导出生成器函数?_Javascript_Generator_Koa_Co - Fatal编程技术网

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标志?