2012-06-15 46 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 –