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