【问题标题】:node.js mongodb - how to make insert wait unit connection is established?node.js mongodb - 如何建立插入等待单元连接?
【发布时间】:2013-11-24 18:30:10
【问题描述】:

使用 node.js 和 MongoDB 存储实时数据流。在我的程序中,由async:series 驱动的 DBSetUp() 连接到 MongoDB 并完成初始设置。 DBInsert() 在初始设置完成后将数据插入到集合中。我将这些函数分开,因为会有很多 DBInsert() 调用。我不确定如何让 DBInsert() 等到 DBSetUp() 执行完成。

似乎我可以在 DBInsert() 中使用async:series 来保持循环,直到 DBSetUp() 执行完成后再插入。我不确定如何实施。有更好的想法吗?非常感谢您的想法。

代码sn-p

var mongodb = require('mongodb');
MongoClient = mongodb.MongoClient;
var async = require('async');

...

// Connect to DB and get handle to collection using async:series
DBSetUp(); 

// Wait for DBSetup before inserting    
DBInsert(); 

....

【问题讨论】:

    标签: node.js mongodb asynchronous


    【解决方案1】:

    解决了!在 node.js google group 上找到了解决方案。下面是代码sn-p

    function DBInsert()`
    {
      async.series([
       function (callback) {
          //Check pre-conditons before insert
          ReadyNow("check", function (err) {
              callback();
          });
        },
       function (callback) {
          // Insert
          callback();
        }  
    }
    
    Function ReadyNow(something,callback)
    {
       setTimeout(function () {
        // check pre-conditions  
        if (#pre-conditions#)  {        
            callback(); 
        }
        else 
        {
       setTimeout(arguments.callee, 20);
        }   
       }, 20);  
    }
    

    【讨论】:

    • 很抱歉,这是一个骇人听闻的解决方案。
    【解决方案2】:

    在你的 DBSetUp 中异步序列的回调中,你可以调用你的 DBInsert。

    async.series(tasks, function(err, results) { DBInsert(); });
    

    创建一个存储与客户端的连接的变量和一个通过回调返回连接mongo连接的函数。如果您的连接已定义,它可以返回预缓存的连接。否则,它会调用 DBSetUp,将连接保存到变量中,然后包装函数将通过回调返回连接。这样您就可以使用相同的函数来请求访问数据库,而无需知道连接是否存在。

    var conn = null
    getDB = function(cb) {
      if(conn) 
        return cb(null, conn)
      else
        DBSetUp(cb);
    }
    

    【讨论】:

    • 是的,如果我有所有要插入的数据,这将起作用。由于我正在存储实时流数据,因此我正在寻找一个强大的解决方案。
    • 好的,我刚刚添加了另一个建议
    猜你喜欢
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 2022-01-18
    • 2017-07-07
    • 2017-11-11
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多