Ich habe die folgende Situation mit Observables in meiner Angular4 App, die ich einfach nicht zur Arbeit kommen kann: Ich möchte zusammenfassende Daten aller meiner Buchungstage für eine Übersichtsseite sammeln. Alle Tage zu bekommen ist eine Beobachtungsstelle, und jeden Tag gibt es eine Liste von Buchungen dieses Tages, die ich abrufen muss - wieder eine beobachtbare Quelle. Aus dieser Liste errechne ich eine Zusammenfassung des Tages. All diese Zusammenfassungen möchte ich in einer sich daraus ergebenden Beobachtbarkeit emittieren.RxJS: Observable von Array für Array von Observables
Ich habe viel kompliziertere Dinge ausprobiert, aber immer die inneren Observablen, auf die ich nicht gewartet habe, um fertig zu werden, und ich habe leere Zusammenfassungen. Ich habe zurück zu den Grundlagen bekommen, und etwas in diese Richtung sollte funktionieren:
getSummaries(): Observable<BookingDaySummary[]> {
return this.bookingService.getBookingDays().take(1).mergeMap(
days => this.calculateSummaryOfDays(days)
)
};
private calculateSummaryOfDays(days: BookingDay[]): Observable<BookingDaySummary[]> {
const summaries$ = days.map(day => this.calculateSummary(day));
// I'm aware that the next line is not correct.
// Essentially I want the array of observables to complete
// and have an array of the resulting values.
return Observable.merge(summaries$);
}
private calculateSummary(day: BookingDay): Observable<BookingDaySummary> {
// ... logic to get summary from one day
}
jedoch die Art der summaries$
ist Observable<Observable<BookingDaySummary>
und nicht beobachtbar. Es läuft also alles auf: Wie mache ich einen Observable<T[]>
von [Observable<T>]
?
Auch: Sollte die innerste Methode, die ich in .map
benutze, ein Observable zurückgeben oder einfach eine Karte auf dem ankommenden Typ zu T sein, wenn ich beabsichtige, ein Observable<T>
zu produzieren?
Berechnet collectSummary wirklich (muss) ein Observable zurückgeben? –
@ IngoBürk: Das war Teil der Frage. Ich habe beides versucht. Die Methode selbst verwendet ein Observable (ein anderer DB-Abruf), also muss es wohl sein. – EluciusFTW