Mongodb nodejs驱动程序。不必要的回调

时间:2015-12-16 13:27:40

标签: node.js mongodb

我正在windows10上开发一个MEAN堆栈。我为mongodb的findAll,gridstore.open和gridstore.write(以及几乎所有mongodb的函数。这些是我遇到的麻烦)创建了一个包装助手,它使用了deasync,因此我不必通过回调。我正在经历我的回调函数没有被调用!并不总是,但有时候。但是当我在Mac上运行时,总是会调用回调。总是。我的问题是,

1)mongodb上是否有任何日志为什么我的回调没有被调用?

2)如docs中所述,是否有可能在Windows(vs mac)上以不同方式处理群集进程(请清除它)虽然在我实现群集之前,我已经遇到了这个问题。

聚苯乙烯。我在Windows 10上运行并尝试通过process.send接收和传递,this似乎也发生在我身上。

这是我的MongoDB Helper包装器的代码片段

exports.FindAll = function(db, collectionName, qObj){
var retVal = [];
var done = false;
var errObj;
if(!qObj)
    qObj = {};

var functionExec = function(err, db){
    var cursorObj = db.collection(collectionName).find(qObj);

    cursorObj.each(function callback(err, result){
        if(err){
            console.log("error on DBHelper GetAll");
            console.log(err);
            retVal = err;
            done = true;
            errObj = err;
        }
        if (result == null)
            done = true;
        else
            retVal.push(result);
    });
};
if(!(db.serverConfig.isConnected && db.serverConfig.isConnected()))// || !db.serverConfig.connected)
    db.open(functionExec);
else
    functionExec(undefined, db);
while(!done) 
{
    deasync.runLoopOnce();
    setTimeout(function(){
        if(!done){
            console.log("FindAll callback was not called within specified time");
            errObj = new Error("FindAll callback was not called within specified time");
            done = true;
        }
    },5000);
}
if(errObj)
    throw errObj;
return retVal;

};

1 个答案:

答案 0 :(得分:0)

看起来我现在必须放弃deasync。虽然它看起来像一个很有前途的项目,但在here

上运行的窗口上似乎存在一个问题(平台依赖于Node / libuv,如mac所述)

现在,我必须学会爱Nodejs的异步性质。并按照@robertklep

的建议,将项目中的每个deasync切换为promises