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 が「未定義」を返し、クエリの結果を返すことです。ある種のブロックメカニズムができると確信していますが、このようなことを行う正しい方法を知りたいです。