首页 > 解决方案 > 无法从 mongodb 检索对象到父函数

问题描述

我正在尝试访问从mongo 集合中获得的对象到其功能之外。

这就是我正在做的事情:

function getOldMessage(user) {
//this is where i want to store the object
var oldMsg = {};
messagedb.findOne({ "room": user.room }, function(err, foundMsg) {
    if (err) {
        console.log(err)
    } else {
        //here i am assigning this foundMsg to my object
        oldMsg = foundMsg;
    }
})
// here this is undefined or an empty object
console.log(oldMsg);
return oldMsg;

}

标签: javascriptnode.jsmongodbexpressmongoose

解决方案


var oldMsg在 getOldMessage 的范围内声明,并且在它的父范围内不可访问,这是您尝试访问它的地方。有关范围的更多信息,请参阅了解 JavaScript 中的范围

Mongoose 方法返回 Promise,因此您可以使用 async/await 从 mongo 检索旧值。

const getOldMessage = async user => messagedb.findOne({ "room": user.room });

const oldMessage = await getOldMessage(someUser);
console.log(oldMessage);

或者,如果您愿意Promise

const getOldMessage = user => new Promise((resolve, reject) =>  
    messagedb.findOne({ "room": user.room },(err, foundMsg) => {
        if (err) return reject(err);
        resolve(foundMsg);
    })
);

getOldMessage(someUser).then(message => console.log(message));


推荐阅读