2012-06-15 48 views
1

我想在节点中创建一个子进程,并阻塞光纤,直到进程终止。他们这样,我明白了,就应该是这个样子:node.js中的同步产卵

var child_process = require ("child_process"); 
var Fiber = require ("fibers"); 
var Future = require ("fibers/future"); 

var ls = Fiber (function() { 
    var lsproc = child_process.spawn ("ls"); 
    var lsonSync = Future.wrap (lsproc.on); 

    console.log ("return: " + lsonSync ("exit").wait()); 
}).run(); 

从节点的响应是:

TypeError: Object #<Object> has no method 'emit' 

我认为这事做的事实,我包装实例方法而不是函数,但我不知道如何继续。

+0

你为什么不使用的过程呢? Fibers代表了Node.js反对的一切。 – alessioalex

+0

@alessioalex我正在尝试流星在服务器上的节点上运行,但所有东西都包裹在光纤中,并以同步样式编写。 – wkz

+0

啊我明白了。我会尝试使用类似DerbyJS的东西,或者制作自己的框架(但这只是我的看法)。 – alessioalex

回答

5

有时候你需要提出问题的答案才能进入你的脑海。

绑定on - 方法来lsproc在未来的包装之前,解决了这个问题:

var child_process = require ("child_process"); 
var Fiber = require ("fibers"); 
var Future = require ("fibers/future"); 

var ls = Fiber (function() { 
    var lsproc = child_process.spawn ("ls", ["/etc"]); 
    var lsonSync = Future.wrap (lsproc.on.bind (lsproc)); 

    console.log ("return: " + lsonSync ("exit").wait()); 
}).run(); 
+0

_有时候你需要问这个问题的答案是否会出现在你的头脑里+1 –