如何解决在ndoejs和mongoose中保存到数据库后返回数据时调用套接字
第一个::我想在databse中保存数据:
秒:我想返回用户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 });
})
但是我对此代码有疑问,有时它可以正常工作,有时它在步骤 3 中返回item = {null
。
现在我该如何解决这个问题?
解决方法
问题是,您没有等待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)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。