Node.js nodejs光纤不适合我

Node.js nodejs光纤不适合我,node.js,node-fibers,Node.js,Node Fibers,结果填充在exec函数中,但它永远不会返回到主线程。。。我做错了什么 var Fiber, exec, execSync; exec = require("child_process").exec; Fiber = require('fibers'); execSync = function(cmd) { var cmdExec, final; cmdExec = function(cmd) { var fiber, _this

结果
填充在
exec
函数中,但它永远不会返回到主线程。。。我做错了什么

  var Fiber, exec, execSync;

  exec = require("child_process").exec;

  Fiber = require('fibers');

  execSync = function(cmd) {
    var cmdExec, final;
    cmdExec = function(cmd) {
      var fiber,
        _this = this;
      fiber = Fiber.current;
      exec(cmd, function(se, so, e) {
        var result;
        fiber.run();
        result = se + so + e;
        return result;
      });
      return Fiber["yield"]();
    };
    final = '';
    Fiber(function() {
      return cmdExec(cmd);
    }).run();
    return final;
  };

  console.log(execSync('ls ..'));

代码中有一些问题。。这里有一些代码可以满足您的需要:

var Fiber, exec, execSync;

exec = require("child_process").exec;

Fiber = require('fibers');

execSync = function(cmd) {
  var fiber = Fiber.current;
  exec(cmd, function(err, so, se) { 
    if (err) fiber.throwInto(err);
    fiber.run(se + so);
  });
  return Fiber.yield();
};

Fiber(function() {
  console.log(execSync('ls ..'));
}).run();
最大的问题是,您似乎混淆了
run
yield
的角色。基本上,
yield
暂停光纤,
运行
将恢复(或第一次启动)。您应该做的是在光纤内运行任何需要调用
execSync
的代码,然后
execSync
将获取对当前光纤的引用,然后调用
Fiber.yield()
。当
exec
调用返回时,将使用
fiber.run()
恢复光纤

另一个较小的问题是
exec
回调的一些参数比较混乱。参数为
err、stdout、stderr