javascript – 在Node.js中进行同步MongoDB查询的正确方法是什么?

我正在为MongoDB使用Node.JS驱动程序,我想执行同步查询,像这样:

function getAThing()
{
    var db = new mongo.Db("mydatabase", server, {});

    db.open(function(err, db)
    {
        db.authenticate("myuser", "mypassword", function(err, success)
        {
            if (success)
            {
                db.collection("Things", function(err, collection)
                {
                    collection.findOne({ name : "bob"}, function(err, thing)
                    {                           
                        return thing;
                    });
                });
            }
        });
    });
}

问题是,db.open是一个非同步调用(它不阻止),所以getAThing返回“undefined”,我希望它返回查询的结果。我确定我可以使用某种阻止机制,但我想知道正确的方法来做这样的事情。

最佳答案
没有办法使这个同步的w / o某种可怕的黑客。正确的方法是让getAThing接受一个回调函数作为参数,然后一旦有事情就调用该函数。

function getAThing(callback)
{
    var db = new mongo.Db("mydatabase", server, {});

    db.open(function(err, db)
    {
        db.authenticate("myuser", "mypassword", function(err, success)
        {
            if (success)
            {
                db.collection("Things", function(err, collection)
                {
                    collection.findOne({ name : "bob"}, function(err, thing)
                    {       
                        db.close();                    
                        callback(err, thing);
                    });
                });
            }
        });
    });
}

转载注明原文:javascript – 在Node.js中进行同步MongoDB查询的正确方法是什么? - 代码日志