来自 nodejs 的 mongodb 调用的返回值
2012-05-20
3755
如何从 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.name、x.email 等访问元素。
这就是数据库中保存的内容。
{ "_id" : ObjectId("4fb934a75e189ff2422855be"), "name" : "john",
"password":"abcdefg", "email" : "[email protected]" }
{ "_id" : ObjectId("4fb934bf5e189ff2422855bf"), "name" : "james",
"password" :"123456", "email" : "[email protected]" }
1个回答
您无法使用异步函数
return
。您必须在回调中处理结果:
usernameFromId(function(user){
console.log(user);
});
这是由于异步编程的性质:“ 立即退出 ,设置一个回调函数以供将来某个时间调用。” 这意味着:
var x = usernameFromId(...);
在实际调用回调之前,将对其进行完整评估(包括将
x
设置为从
usernameFromId
返回的
undefined
值):
function (user) {
return user;
}
并且,至少在当前的
ECMAScript 5
标准下,您无法绕过此问题。由于 JavaScript 是单线程的,任何等待回调的尝试都只会锁定单个线程,从而使回调和
返回用户
永远处于事件队列中的待处理状态。
Jonathan Lonowski
2012-05-20