關鍵是做到這一點做的呼叫,並在回調的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()
它們是異步的,因爲它們通過網絡,異步是唯一的方法來做到這一點在node.js中 –
我需要確保不會有任何長時間運行的流程會窒息應用程序。由於它基本上是單線程的(即使我們利用集羣,這使得它在n不是很大的情況下是線程的) – Tuco
節點進程不是單線程的。 Node.js用戶代碼(JavaScript)是單線程的。 –