2013-04-05 119 views
0

我正在研究一個預處理較少,手寫筆等的庫。預處理器可以是異步的,也可以是同步的。由於結果僅用於構建階段,因此在此處編寫阻止代碼不是問題。是否有可能在node.js的同步函數中處理異步和同步函數結果?

因爲大多數預處理器都是同步的,並且庫期望同步函數在鏈中,所以我想知道是否可以將預處理器函數包裝在同步函數中,以便同時處理來自預處理函數的同步和異步結果?

基本上可以這樣做,不知何故?

syncFn = function(contents) { 
    var res = syncOrAsyncFn(contents, function(err, contents) { 
    res = contents 
    }) 
    // .. do some magic here that waits for the results of syncOrAsyncFn 
    return res; // Return the result from a function that could be async or sync 
} 

回答

0

對不起,這是不可能的。無論何時運行代碼塊,都不會運行,即NodeJS中沒有真正的並行性。因此無論你做什麼:res = contents行只能在syncFn完成任何操作後纔會觸發,即在所有同步操作在一個代碼塊中完成作業之後。

這迫使程序員的NodeJS使用回調格局,例如:

syncFn = function(contents, callback) { 
    syncOrAsyncFn(contents, function(err, contents) { 
    callback(contents); 
    }) 
} 
+0

可悲的,但它是真實的。 – ragulka 2013-04-08 14:34:36