node.js mongodb-如何建立插入等待单元连接?
使用node.js和MongoDB存储实时数据流。在我的程序中,由node.js mongodb-如何建立插入等待单元连接?,node.js,mongodb,asynchronous,Node.js,Mongodb,Asynchronous,使用node.js和MongoDB存储实时数据流。在我的程序中,由async:series驱动的DBSetUp()连接到MongoDB并完成初始设置。DBInsert()在初始设置完成后将数据插入集合。我将这些函数分开,因为将有许多DBInsert()调用。我不知道如何使DBInsert()等待DBSetUp()执行完成 似乎我可以在DBInsert()中使用async:series来保持循环,直到DBSetUp()执行完成后再插入。我不知道如何实施。有更好的主意吗?非常感谢你的想法 代码片段
async:series
驱动的DBSetUp()连接到MongoDB并完成初始设置。DBInsert()在初始设置完成后将数据插入集合。我将这些函数分开,因为将有许多DBInsert()调用。我不知道如何使DBInsert()等待DBSetUp()执行完成
似乎我可以在DBInsert()中使用async:series
来保持循环,直到DBSetUp()执行完成后再插入。我不知道如何实施。有更好的主意吗?非常感谢你的想法
代码片段
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();
....
在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);
}
解决了!在node.js google组上找到解决方案。下面是代码片段
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);
}
是的,如果我有所有的数据要插入,那就行了。因为我正在存储实时流数据,所以我正在寻找一个健壮的解决方案。好吧,我刚刚添加了另一个建议,很抱歉,这是一个黑客解决方案。