var在尝试返回数据时返回undefined,并且cosole日志显示数据

时间:2015-11-05 10:38:51

标签: javascript node.js mongodb

这里是使用

的代码
{{1}}

所以基本上我希望这个函数在我调用函数时返回值,当我在这个toArray函数中进行控制台登录时,它的罚款方法不是。 我只是不明白如何让这个工作

1 个答案:

答案 0 :(得分:2)

您获取未定义值的原因是 toArray() 游标方法是异步的,并且可以随时完成。在您的情况下,它在您使用console.log()后完成,因此当您访问它们时,这些值是未定义的。

要解决此问题,您只能使用 toArray() 功能的回调中的值。它看起来像这样:

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