RxJS:可观察的Observable数组的数组

Elu*_*FTW 9 merge observable rxjs typescript

我在Angular4应用程序中使用Observables时遇到以下情况:我无法开始工作:我想收集所有预订日的摘要数据以获取概述页面.得到所有的日子是一个Observable,每天都有一个我必须检索的当天预订列表 - 再次是一个可观察的来源.从这个列表中我计算出当天的摘要.我希望在结果可观察中发出所有这些摘要.

我已经尝试了许多更复杂的事情,但总是内部的可观察者没有等待完成,我得到了空的摘要.我已经回到了基础,这些方面应该有用:

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
}
Run Code Online (Sandbox Code Playgroud)

但是,类型summaries$是否Observable<Observable<BookingDaySummary>而不是Observable.所以这一切归结为:我如何制作一个Observable<T[]>来自[Observable<T>]

另外:.map当我打算生成一个Observable<T>?时,我使用的最内部方法是返回一个Observable还是只是一个传入类型的地图?

Pau*_*ard 5

如何从Observable <T> []使Observable <T []>?

forkJoin执行此操作。对T使用字符串:

import { of, forkJoin} from 'rxjs';
import { Observable } from 'rxjs'

const source:Array<Observable<String>> = [of('A'), of('B'), of('C') ];

const source2:Observable<String[]> = forkJoin(source);

source2.subscribe((res=>console.log(res)));
Run Code Online (Sandbox Code Playgroud)

https://stackblitz.com/edit/arrayofobs2obsofarray?file=index.ts


Fan*_*ung 0

尝试

return Observable.from(summaries$).mergeMap(value=>value);
Run Code Online (Sandbox Code Playgroud)

我认为 summaries 是一个可观察数组 - Observable[] 使用 Observable.from 将一一发出它们,然后通过 mergeMap 压平并执行 Observable,最后你将得到纯值发射。