Javascript 无法将对象从mongodb检索到父函数
我正在尝试访问从mongo collection获取的对象,使其超出其功能范围 以下是我正在做的:Javascript 无法将对象从mongodb检索到父函数,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正在尝试访问从mongo collection获取的对象,使其超出其功能范围 以下是我正在做的: 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)
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;
}我也有同样的问题。我找不到解决方案,所以我这样解决:
var oldMsg = {};
oldMsg = await messagedb.findOne({ "room": user.room });
console.log(oldMsg);
return oldMsg;
但是,必须将函数更改为异步
希望,这是帮助。
var oldMsg
在getOldMessage的范围内声明,并且在其父范围内无法访问,而您正试图访问它。有关作用域的详细信息,请参阅
Mongoose方法返回承诺,因此您可以使用async/await从mongo检索旧值
const getOldMessage=async user=>messagedb.findOne({“room”:user.room});
const-oldMessage=wait-getOldMessage(someUser);
console.log(旧消息);
或者如果您更喜欢承诺
const getOldMessage=user=>新承诺((解析、拒绝)=>
messagedb.findOne({“room”:user.room},(err,foundMsg)=>{
如果(错误)返回拒绝(错误);
解决(foundMsg);
})
);
然后(message=>console.log(message));
如果您将async
放在getOldMessage
前面,该函数将返回一个承诺而不是值,因此它不会工作。嘿,我正在尝试这样做,它会给我错误,说wait仅在async函数中有效。每当您使用wait
关键字时,它都需要在异步函数中使用。您有两种选择,将对getOldMessage
的等待调用包装在一个异步函数中,或者执行承诺路线(我的第二个示例)。@AkhilBisht如果您可以接受此答案,请选择答案旁边的复选标记。