【发布时间】:2021-04-28 20:17:15
【问题描述】:
我有删除功能,它会发出 socket.io 然后套接字更新其他方项目列表并删除这个项目(替换静态文本)问题是当我收到套接字数据时我找不到匹配项目来更新它。
逻辑
- 用户 1 删除消息
- 用户 2 获取(静态文本),例如
this message was deleted
流程
-
User 1删除消息(有效) -
User 1的消息被删除(有效) -
socket.io收到此删除的通知(有效) -
User 2从socket.io获取已删除的消息数据(有效) -
socket.io查找并替换已删除的消息(不起作用)
代码
User 1 delete message
async presentPopover(ev: any, indexOfelement: any, own: any) {
// send clicked item data to popover (popover will delete it and send back results)
const popover = await this.popoverController.create({
component: MessagesComponent,
cssClass: 'my-custom-class',
event: ev,
componentProps: { id: ev, index: indexOfelement, from: 'pchat', own },
translucent: true
});
// returned results from popover
popover.onDidDismiss().then((result: object) => {
console.log('res2021 1: ', result);
console.log('this.room.messages 2: ', this.room.messages);
if (result['data']) {
this.socket.emit('messageDelete', { message: result['data'] }); // data is "id: 187, index: 15"
this.room.messages.splice(result['data'].index, 1); // remove message from user 1 list (prefered if replace the text as well here instead of removing it)
}
});
return await popover.present();
}
(popover)
// delete message (in popover)
Pdelete(event) {
this.privateChatsService.deleteMessage(this.navParams.get('id')).subscribe((res: any) => {
this.popoverController.dismiss({ id: this.navParams.get('id'), index: this.navParams.get('index') }); //send back data
});
}
User 2 gets update about deleted message
ngOnInit() {
// remove deleted message
this.socket.fromEvent('messDel').subscribe((message: any) => {
console.log('from del emit in private chat: ', message); // data is "id: 187, index: 15"
this.room.messages.splice(message.msg.message.index, 1); // make changes in deleted item ("index" cannot be found)
});
// end of socket.io
}
注意:问题出在this.room.messages.splice(message.msg.message.index, 1); 代码中,socket 无法根据索引找到正确的项目,其余工作正常。
【问题讨论】:
-
您是否收到任何错误消息?
-
@RachidO 除了
index是未定义的编号。 -
您将
ngOninit标记为async,其中can be problematic。此外,您将this.socket.fromEvent('messDel')的回调作为异步,但内部没有做任何等待。你需要包装你的函数/逻辑来实际使用 Promise 来工作。 -
@Phix 你说得对,这个异步是针对旧代码的,当我更改它们时我忘了删除异步,谢谢提醒。
标签: javascript angular typescript