javascript - 使用函数在地图中返回值?
问题描述
我映射一组对象并为“latestMessage”添加一个值
latest() 函数搜索消息并返回和对象。但是地图的结果不包含新的属性。如果我删除了最新的函数并只放置一个字符串,尽管它可以工作。
function latest(userId) {
Chat.findOne({ $or: [{ to: userId }, { from: userId }] }, {}, { sort: { createdAt: -1 } }, function (err, msg) {
return msg
})
}
不工作:
let array = users.map(v => ({ ...v._doc, latestMessage: latest(v._id) }))
作品:
let array = users.map(v => ({ ...v._doc, latestMessage: {test: 'test'} }))
解决方案
由于Chat.fineOne
正在运行回调函数,因此您必须在该函数中执行逻辑。我不确定您的应用程序的其余部分是如何设置的,但您可能能够创建该对象并将其传递给您的查询。当回调发生时,查询可以更新对象。请注意,这将是在地图已经创建之后,因为它是async
.
let array = users.map(v => {
let value = { ...v._doc, latestMessage: "" };
setLatest(value);
return value;
});
function setLatest(value) {
Chat.findOne({ $or: [{ to: value._id }, { from: value._id }] }, {}, { sort: { createdAt: -1 } }, function (err, msg) {
value.latestMessage = msg;
})
}
推荐阅读
- javascript - MongoDB 连接错误
- c++ - 如何将对象的父级分配给 QObjectList?
- mongodb - MONGODB 使用 sum 但尝试访问字符串时出现问题
- python - 需要提前读取一行而不是一次读取两行(Python)
- python - 导入错误:没有名为 cv2 的模块(Python、Atom IDE)
- c - C基础,如果输入不是正整数,请求新的输入
- docker - 在窗口容器中安装 Visual Studio 构建工具会导致错误“hcsshim::ImportLayer - 在 Win32 中失败...”
- c++ - C ++中复制省略背后的基本原理是什么?
- swiftui - 为什么在 SwiftUI 中将照片从照片选择器添加到我的模型时,视图会不断更新?
- sas - 如何从导入的 CSV 转换日期格式以便能够合并数据