我正在尝试编写node.js应用程序,我们需要在生产中部署它。
我们需要确保当有任何长时间运行的进程/操作(例如查询或数据库服务器访问)时,node.js不会挂起。
所以,我试图调用mongo或文件系统,这需要很长时间才能完成,这样我就可以验证其他node.js服务器可以在发生任何其他请求时自由提供服务。
可悲的是,我无法插入mongo需要很长时间才能完成的记录或者对文件系统进行同步调用。
有人可以告诉我该怎么做吗?
由于
图科
答案 0 :(得分:0)
诀窍是在执行调用的块和回调中的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;
})()
并且,在所有db调用中你必须这样做:
dbChain.push(...(a function ) ...)
所有回调中的
dbChain.next()