javascript - 在ndoejs和mongoose中保存数据库后返回数据时调用socket
问题描述
我想在将该通知保存到数据库后向用户发送通知。
首先:我想将数据保存在数据库中:
第二:我想返回用户FirstName adn lastName
async CreateNotification(item): Promise<any> {
const requestModel = new NotificationModel();
requestModel.sender = item.sender;
requestModel.reciver = item.reciver;
requestModel.notificationType = item.notificationType;
requestModel.sendDate = new Date();
return requestModel.save()
.then((data) => {
this.GetNOtificationById(data)
.then(data=>{
return data;
})
});
}
async GetNOtificationById(data) {
let item = await NotificationModel
.findOne({ sender: data.sender, reciver: data.reciver, notificationType: data.notificationType })
.populate({ path: 'sender', select: "firstName lastName" }).exec();
return item;
}
三:我想返回该数据并在套接字中使用它:
socket.on('send Notificaiton', (data) => {
let item;
notificationRepository.CreateNotification(data)
.then(data => {
item = data;
})
io.sockets.in(data.reciver).emit('notification', { id: item.id, senderId: item.sender._id, notificationType: item.notificationType, senderName: item.sender.firstName + ' ' + item.sender.lastName });
})
但我对这段代码有疑问,有时它工作正常,有时它在第三null
步中返回 item= 。
现在我该如何解决这个问题???
解决方案
问题是,你不是在等待notification creation
.
// Notication
async CreateNotification(item): Promise<any> {
try {
const requestModel = new NotificationModel();
requestModel.sender = item.sender;
requestModel.reciver = item.reciver;
requestModel.notificationType = item.notificationType;
requestModel.sendDate = new Date();
const data = await requestModel.save()
const result = await this.GetNOtificationById(data)
return result
} catch(err) {
console.log(err)
throw err
}
}
socket.on('send Notificaiton', async (data) => {
try {
const item = await notificationRepository.CreateNotification(data)
if (item) {
io.sockets.in(data.reciver).emit('notification', { id: item.id, senderId:
item.sender._id, notificationType: item.notificationType, senderName:
item.sender.firstName + ' ' + item.sender.lastName });
} else {
console.log('Item does not exist', item)
}
} catch (err) {
console.log('Error while creating item: ', err)
}
推荐阅读
- javascript - 尝试将多个 ID 添加到 twitter 推文功能
- c - 把字符变成数字并在c中排列数字
- javascript - 配置文件名称中的 rc 代表什么?
- elasticsearch - 在弹性中索引海量数据的最快方法
- javascript - 正则表达式检查引荐来源网址字符串
- typeorm - TypeORM 的迁移:generate 重新生成整个数据库模式
- javascript - Mongoose 模型未定义
- elasticsearch - 快照 GC 会影响性能吗?用户可以强制GC吗?
- go - 使用动态(config.toml)配置文件运送 Golang 二进制文件
- c - 例如,如何使用 strtok(string, "\n") 删除字符串末尾的 \n?