Node js mongodb findOne无法同步工作



我有一个带有用户和令牌列表的mongoDB数据库。当我使用查询查找查询时,它的返回不确定。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;}

我打印为FindOne的日志如下:

 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;}

和日志是:

cursor query: Zeus
getApiTokenForUser return: undefined
saveUserApiToken
cursor result: {"_id":"58a56442545e812a68f87bbe","user":"Zeus","token":"eyJhbGci
OiJIUzI1NiJ9.WmV1cw.mAQh65o-d2tOp_Fchi7iPm5pu_2f4QSXOAQ5JtoEe10"}

我想发现一个同步工作。有什么办法?

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

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

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

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

希望我的答案对您有帮助。

最新更新