![](/img/trans.png)
[英]How to make sure that node js returns data back after making asynchronous calls?
[英]how to make sure that the node.js calls to mongodb are really asynchronous
我正在嘗試編寫一個node.js應用程序,我們需要在生產環境中部署它。
我們需要確保當存在任何長時間運行的進程/操作(例如查詢或數據庫服務器訪問)時,node.js不會掛起。
因此,我正在嘗試調用mongo或文件系統,這需要很長時間才能完成,這樣我就可以驗證其他node.js服務器在發生該請求時是否可以自由處理任何其他請求。
可悲的是,我無法插入一條記錄,而mongo確實需要很長時間才能完成該記錄或對文件系統進行同步調用。
有人可以告訴我該怎么做嗎?
謝謝
圖科
技巧是在執行調用的塊之后在控制台上記錄數據,並在回調中創建console.log(如果首先在控制台中終止,則消息實際上是異步的)
我使用mongojs作為mongo的驅動程序:
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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.