尝试返回数据时,返回未定义的数据,并显示数据

嗨这里是代码即时通讯使用

function get_last_chat_time(steamid){ if(!db_connect) { return 0; } chat_db.aggregate( [ {"$match":{"name":"chat-msg",steamid: steamid}}, { "$sort" : { date : -1 } }, {"$limit" : 1} ] ).toArray(function(err, list){ if (err) { console.log("Error loading history from DB: " + err); } else { var i = list.length-1; var lasttime = Math.floor((new Date() - list[i].date)/1000); console.log(Math.floor((new Date() - lasttime)/1000));//this works perfect return lasttime; } }); } console.log(get_last_chat_time(msg.steamid));// this is undefined 

所以基本上我想这个函数返回值,当我调用函数,当我做控制台日志里面这个toArray函数它的优秀的一面,而不是。 我只是不明白如何得到这个工作

你得到未定义值的原因是因为toArray()游标方法是asynchronous的,并且可以在任何时候完成。 在你的情况下,你正在使用console.log()完成后,所以当你访问它们的值是不确定的。

要解决这个问题,你只能使用toArray()函数的callback函数中的值。 它看起来像这样:

 function get_last_chat_time(steamid, callback){ if(!db_connect) { return callback(null, 0); } chat_db.aggregate( [ {"$match":{"name":"chat-msg",steamid: steamid}}, { "$sort" : { date : -1 } }, {"$limit" : 1} ] ).toArray(function(err, list){ if (err) { console.log("Error loading history from DB: " + err); return callback(err); } var i = list.length-1; var lasttime = Math.floor((new Date() - list[i].date)/1000); console.log(Math.floor((new Date() - lasttime)/1000));//this works perfect return callback(null, lasttime); }); } get_last_chat_time(msg.steamid, function(err, result){ console.log(result); })