如何确保对mongodb的node.js调用实际上是异步的

时间:2012-09-13 13:51:40

标签: node.js mongodb

我正在尝试编写node.js应用程序,我们需要在生产中部署它。

我们需要确保当有任何长时间运行的进程/操作(例如查询或数据库服务器访问)时,node.js不会挂起。

所以,我试图调用mongo或文件系统,这需要很长时间才能完成,这样我就可以验证其他node.js服务器可以在发生任何其他请求时自由提供服务。

可悲的是,我无法插入mongo需要很长时间才能完成的记录或者对文件系统进行同步调用。

有人可以告诉我该怎么做吗?

由于

图科

1 个答案:

答案 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()