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还是只是一个传入类型的地图?
如何从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
尝试
return Observable.from(summaries$).mergeMap(value=>value);
Run Code Online (Sandbox Code Playgroud)
我认为 summaries 是一个可观察数组 - Observable[] 使用 Observable.from 将一一发出它们,然后通过 mergeMap 压平并执行 Observable,最后你将得到纯值发射。
| 归档时间: |
|
| 查看次数: |
7543 次 |
| 最近记录: |