Я получаю Observable<Group[]>
из моей коллекции Firebase.В этом классе группы есть идентификатор, который я хочу использовать для получения другого массива наборов данных из Firebase, который будет сообщениями для каждой уникальной группы Observable<Message[]>
. (Каждая группа имеет свой собственный чат: Message[]
) И он хочет вернуть наблюдаемыйкоторые содержат массив нового типа: return { ...group, messages: Message[] } as GroupWithMessages
конечная цель должна быть Observable<GroupWithMessages[]>
getGroupWithChat(): Observable<GroupWithMessages[]> {
const groupColl = this.getGroups(); // Observable<Group[]>
const messages = groupColl.pipe(
map(groups => {
return groups.map(meet => {
const messages = this.getMessagesFor(group.uid);
return { messages:messages, ...group} as GroupWithMessages
});
})
);
return messages;
}
}
и здесь функция сообщения
getMessagesFor(id: string): Observable<Message[]> {
return this.afs.collection<Message>(`meets/${id} /messages`).valueChanges();
}
к сожалениюэто не работает, потому что когда я создаю новый Obj, я не могу связать messages:messages
, потому что сообщения ist vom typ Observable<Message[]>
Я надеюсь, что это очищает вещи
ОБНОВЛЕНИЕ: мойТеперь основная проблема сводится к следующему:
getGroupsWithMessages() {
this.getJoinedGroups()
.pipe(
mergeMap(groups =>
from(groups).pipe(
mergeMap(group => {
return this.getMessagesFor(group.uid).pipe(
map(messages => {
return { ...group, messages } as GroupIdMess;
})
);
}),
tap(x => console.log('reaching here: ', x)),
toArray(),
tap(x => console.log('not reaching here = completed: ', x))
)
),
tap(x => console.log('not reaching here: ', x))
)
.subscribe(x => console.log('not reaching here: ', x));
}
, когда я вызываю эту функцию, мой console.log выглядит следующим образом: