问题描述
第一个::我想在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)
}