2012-09-13 19 views
0

我正在嘗試編寫node.js應用程序,我們需要在生產環境中部署它。如何確保node.js調用mongodb真的是異步的

當有任何長時間運行的進程/操作(如查詢)或數據庫服務器訪問時,我們需要確保node.js不會掛起。

因此,我試圖打電話給mongo或需要很長時間才能完成的文件系統,以便我可以驗證其他node.js服務器是否可以在發生其他請求時自由地提供服務。

不幸的是,我無法插入mongo需要很長時間才能完成或與文件系統進行同步呼叫的記錄。

有人可以告訴我該怎麼做嗎?

感謝

圖科

+0

它們是異步的,因爲它們通過網絡,異步是唯一的方法來做到這一點在node.js中 –

+0

我需要確保不會有任何長時間運行的流程會窒息應用程序。由於它基本上是單線程的(即使我們利用集羣,這使得它在n不是很大的情況下是線程的) – Tuco

+0

節點進程不是單線程的。 Node.js用戶代碼(JavaScript)是單線程的。 –

回答

0

關鍵是做到這一點做的呼叫,並在回調的console.log塊後的數據的控制檯日誌,如果在控制檯apears第一消息實際上是異步

進出口使用mongojs作爲驅動程序蒙戈:

collection.find({}, function(err, res) { 
    console.log("done") 
}); 
console.log("sendign signal") 

如果它的異步,在控制檯:

sendign signal 
done! 

現在的鏈接行爲,你可以做這樣的事情

dbChain = (function() { 
    var chain = [], cursor = 0, busy = false; 

    chainin = { 
    push : function(aFn) { 
     if(!busy) { 
     chainin.reset(); 
     aFn(); 
     busy = true; 
     } else { 
     chain.push(aFn) 
     } 
    }, 

    next : function() { 
     cursor++; 
     if(chain[cursor]) { 
     chain[cursor](); 
     } else { 
     chainin.reset(); 
     } 

    }, 

    reset : function() { 
     chain = []; 
     cursor = 0; 
     busy = false; 
    } 
    } 

    return chainin; 

})() 

,並在所有的數據庫調用你要做的:

dbChain.push(...(a function) ...) 
在所有的回調

dbChain.next() 
相關問題