从 nodejs 的 mongodb 调用返回值

Return value from a mongodb call from nodejs

本文关键字:调用 返回值 mongodb nodejs      更新时间:2023-09-26

如何从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" }
不能

有效地return异步函数。您必须在回调中使用结果:

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

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

var x = usernameFromId(...);

在实际调用回调之前,对其进行整体评估(包括将x设置为 usernameFromId 返回的 undefined 值(:

function (user) {
    return user;
}

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