Я закончил тем, что сделал это:
this.carCount$ = this.users$.pipe(
map((users: User[]): Array<Observable<number>> => {
let requests = users.map(
(user: User): Observable<number> => {
return this.store.select(UserSelectors.getCarsForUser(user)).pipe(
map((cars: Car[]): number => {
return cars.length;
})
);
}
);
return requests;
}),
flatMap((results): Observable<number> => {
return combineLatest(results).pipe(
take(1),
flatMap(data => data),
reduce((accum: number, result: number): number => {
return accum + result;
}, 0)
)
})
);
Я думаю, что take (1) заканчивает тем же, что делал Яссер выше, воссоздавая весь поток. Я думаю, что этот способ немного чище.
Я также добавил еще один поток под ним (в коде), который на один уровень глубже с точки зрения извлечения наблюдаемых наблюдаемых. https://stackblitz.com/edit/rxjs-concat-observables-working-1
У кого-нибудь есть более чистый и лучший способ сделать этот тип свертывания наблюдаемых результатов?