我正在尝试编写一个 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;
})()
并且,在您必须执行的所有 db 调用中:
dbChain.push(...(a function ) ...)
在你所有的回调中
dbChain.next()