javascript - 无法从 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;
}
解决方案
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));
推荐阅读
- javascript - 如何通过文本输入将数据添加到 localStorage 并通过另一个文本输入调用它?
- python - Pandas to_sql 参数和性能
- xpath - XPath:获取没有特定@class 或@id 名称的所有元素
- flutter - 如何使用列表视图构建器将检索到的数据从表单页面构建到另一个页面
- java - Opencsv - 如何仅在双引号之外获取用逗号分隔的值,同时忽略双引号?
- c# - 表单提交给 Action 时模型为空
- android - 毕加索图像加载 https 与自签名证书
- php - php中允许的最大文件大小复制功能是什么
- node.js - Mongodb插入50M文档而不重复的最佳方法
- reactjs - ESLint 发现了一个赋值或函数调用,而是在 void 函数上看到了一个表达式