从nodejs的mongodb调用返回值

时间:2012-05-20 18:27:59

标签: javascript node.js mongodb

如何从mongojs查询返回数组。 我将以下查询与nodejs一起执行到本地运行的mongodb数据库中。 Mongojs正在处理这笔交易。 我的问题是;如何从下面的函数调用返回一个数组。

    var databaseUrl = "users";
    var collections = ["users","reports"]; 
    var db = require('mongojs').connect(databaseUrl, collections );

    function usernameFromId(callback){
      db.users.find({}, function(err, result) {
        if(err || !result) console.log("Error");
          else{
           callback(result);
          }
      });
     };


    var x = usernameFromId(function(user){
    return user;
    });

    console.log(x);

这里x是未定义的,我如何创建一个返回值,使x成为一个数组,我可以通过x.name,x.email等访问元素。

这是数据库中的内容。

 { "_id" : ObjectId("4fb934a75e189ff2422855be"), "name" : "john", 
 "password":"abcdefg", "email" : "john@example.com" }
 { "_id" : ObjectId("4fb934bf5e189ff2422855bf"), "name" : "james", 
 "password" :"123456", "email" : "james@example.com" }

1 个答案:

答案 0 :(得分:2)

您可以使用异步函数return。您必须在回调中处理结果:

usernameFromId(function(user){
    console.log(user);
});

这是由于异步编程的本质:" 立即退出 ,设置将来某个时候调用的回调函数。 "这意味着:

var x = usernameFromId(...);
在实际调用回调之前,

将完整地评估(包括将x设置为从undefined返回的usernameFromId值):

function (user) {
    return user;
}

而且,至少在ECMAScript 5的当前标准下,你无法解决这个问题。由于JavaScript是单线程的,任何等待回调的尝试都只会锁定单个线程,使回调和return user永远挂起在事件队列中。