节点js Mongodb findOne不能同步工作

时间:2017-02-16 08:40:13

标签: javascript node.js mongodb mongodb-query

我有一个包含用户和令牌列表的mongodb数据库。当我使用查询查询findOne时,它返回undefined。 findOne的代码如下:

 Context activity_context;
MyDialogClass(Context context){
this.activity_context=context; //now use activity_context to show alertDialog
}

我为findOne打印的日志如下:

var getApiTokenForUser = function(user){
console.log('get api token for :'+user);
var collection = db.collection(user_token_collection_name);
var result;
if(collection){
    console.log("cursor query: "+user);
    var cursor = collection.findOne({'user':user});
    console.log("cursor result: "+JSON.stringify(cursor));
}
return result;}

但是如果我使用find而不是findOne,我可以获得用户列表,但只能在日志中,它仍然会返回undefined。

查找代码是:

 get api token for :Zeus
 cursor query: Zeus
 cursor result: {}
 getApiTokenForUser return: undefined

和日志是:

var getApiTokenForUser = function(user){
console.log('get api token for :'+user);
var collection = db.collection(user_token_collection_name);
var result;
if(collection){
    console.log("cursor query: "+user);
    var cursor = collection.find({'user':user});
    cursor.forEach(function(data) {
        result = data;
        console.log("cursor result: "+JSON.stringify(data));
    });
}
return result;}

我希望findOne同步工作。有什么办法吗?

2 个答案:

答案 0 :(得分:1)

您永远不会将结果分配给第一个代码段中的任何内容。你的代码(简化):

var result; // you never assign anything to it
return result; // undefined

答案 1 :(得分:0)

您可以做的是将同步代码放在findOne的回调中。例如:

collection.findOne({'user':user}, function(error,user) {    
     //Synchornous code here
})

希望我的回答对你有所帮助。