Обновление 4: Здесь не используется функция Cloud. Только createMessage()
метод.
Обновление 3: Пожалуйста, смотрите проблему как Gif. Нажмите на него, чтобы увидеть большой экран.
![enter image description here](https://i.stack.imgur.com/GpYRY.gif)
Обновление 2: Простая подписка, в которой значение генерируется 2 раза. Любая подсказка?
this.chatSubscription = messagesPerChatGroup$.subscribe(async (messages,
) => {
//code
});
Обновление: 1 Это срабатывает только 2 раза. Любая подсказка?
this.chatSubscription = combineLatest([messagesPerChatGroup$,
]).subscribe(async ([messages,
]) => {
//code
});
Оригинал У меня есть эта подписка, и она работает нормально в первый раз.
const messagesPerChatGroup$: Observable<ChatMessageModel[]> =
this.chatService.getMessagesPerChatGroup(this.groupId);
const userActionsPerChatGroup$: Observable<UserActionModel[]> =
this.chatService.getUserActionsPerChatGroup(this.groupId);
const memberIdsPerChatGroup$: Observable<MessageGroupMemberModel> =
this.chatService.getMemberIdsPerChatGroup(this.groupId);
this.chatSubscription = combineLatest([
messagesPerChatGroup$,
userActionsPerChatGroup$,
memberIdsPerChatGroup$
]).subscribe(async ([messages, actions, memberIds]) => {
//code
});
service
getMessagesPerChatGroup(chatGroupId: string): Observable<ChatMessageModel[]> {
return this.afs.collection<ChatMessageModel>(`messageGroups/${chatGroupId}/messages`).valueChanges();
}
Когда я добавляю элемент в вышеуказанную коллекцию this.chatSubscription
выдает значения 2 раза. Почему это так и какое здесь решение? т. е. messageGroups/${chatGroupId}/messages
Так я добавляю записи.
async createMessage(chatGroupId: string, message: ChatMessageModel, userIdToken: string): Promise<void> {
const messageDocId: string = this.afs.createId();
await this.afs.doc<ChatMessageModel>(`messageGroups/${chatGroupId}/messages/${messageDocId}`).set({
senderId: message.senderId,
text: message.text,
timeSent: message.timeSent,
timeReceivedByServer: message.timeReceivedByServer,
notificationSent: message.notificationSent,
});
}
Метод кнопки отправки:
send(): void {
const message: ChatMessageModel = {
senderId: this.uid,
text: this.form.value.text,
timeSent: firebase.firestore.Timestamp.fromDate(new Date(Date.now())),
timeReceivedByServer: firebase.firestore.FieldValue.serverTimestamp(),
notificationSent: false,
};
this.chatService.createMessage(this.groupId, message, this.userIdToken);
this.form.reset();
}