如何从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" }
答案 0 :(得分:2)
您可以使用异步函数return
。您必须在回调中处理结果:
usernameFromId(function(user){
console.log(user);
});
这是由于异步编程的本质:" 立即退出 ,设置将来某个时候调用的回调函数。 "这意味着:
var x = usernameFromId(...);
在实际调用回调之前,将完整地评估(包括将x
设置为从undefined
返回的usernameFromId
值):
function (user) {
return user;
}
而且,至少在ECMAScript 5的当前标准下,你无法解决这个问题。由于JavaScript是单线程的,任何等待回调的尝试都只会锁定单个线程,使回调和return user
永远挂起在事件队列中。