У меня проблема с RX JS. Я создаю приложение веб-чата. Как только мой веб-чат потерял связь с Inte rnet, я хотел бы отправлять свои сообщения после того, как мое соединение станет доступным. Это отлично работает. Более того, я хотел бы получать сообщения из websocket, потому что мне нужно собирать сообщения, которые были отправлены мне, как только я был в автономном режиме. Это тоже отлично работает. Моя проблема в том, что я хотел бы сначала ОЧИСТИТЬ свои сообщения и собрать их еще раз. Прямо сейчас я собираю все сообщения, но он объединяется с предыдущими полученными сообщениями. Что я хотел бы сделать, это просто очистить, а после очистки снова поместить все сообщения в мой веб-чат.
Это мой код для сообщений:
this.messages = this.updates.pipe(
scan((messages: Message[], operation: IMessagesOperation) => {
return operation(messages);
}, initialMessages),
publishReplay(1),
refCount()
);
this.create
.pipe(
map(
(message: Message): IMessagesOperation => {
if (message == null) {
return (messages: Message[]) => {
return [];
};
}
const newMessage = { ...message };
return (messages: Message[]) => {
return messages.concat(newMessage);
};
}
)
)
.subscribe(this.updates);
this.newMessages.subscribe(this.create);
Вот мой метод получения сообщений:
private reconnectAndGetMessages() {
this.reconnectToLastConversation(this.conversationId).subscribe(response => {
const senderIds = [];
const getChatMemeberInfoTasks = [];
for (let i = 0; i < response.entities.length; i++) {
const senderIdExists = includes(senderIds, response.entities[i].sender.id);
if (!senderIdExists) {
senderIds.push(response.entities[i].sender.id);
getChatMemeberInfoTasks.push(this.getChatMemberInfo(response.entities[i].sender.id))
}
}
forkJoin(getChatMemeberInfoTasks).subscribe(membersData => {
for (let i = 0; i < response.entities.length; i++) {
const entityResponse = response.entities[i];
const chatMemberResponse = find(membersData, (el) => {
return el.id === entityResponse.sender.id;
});
this.loaderService.display(false);
this.messageService.parseMessageFromReconnect(entityResponse, chatMemberResponse);
}
this._showSendMessageConfirmation$.next(true);
});
}, error => {
this.firstConnectionWebChat();
});
}
Я совершенно не знаю, что делать, чтобы избежать повторного объединения всех моих сообщений из API с моими предыдущими отображаемыми сообщениями. Спасибо за любую помощь, спасибо!