【发布时间】:2018-06-06 22:30:19
【问题描述】:
我在我的 Angular4 应用程序中使用 Observables 时遇到以下情况,我无法开始工作:我想为概览页面收集所有预订日的摘要数据。获取所有的日子是一个可观察的,每一天都有一个我必须检索的当天的预订列表 - 再次是一个可观察的来源。从这个列表中,我计算了一天的总结。我想在结果 observable 中发出所有这些摘要。
我尝试了很多更复杂的事情,但总是没有等待完成的内部 observables 并且我得到了空的摘要。我已经回到了基础,这些方面的东西应该可以工作:
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
}
但是,summaries$ 的类型是 Observable<Observable<BookingDaySummary>,而不是 Observable。所以这一切都归结为:我如何从[Observable<T>] 制作Observable<T[]>?
另外:当打算生成Observable<T> 时,我在.map 中使用的最内部方法应该返回一个 Observable 还是只是将传入类型映射到 T ?
【问题讨论】:
-
calculateSummary 真的(需要)返回一个 Observable 吗?
-
@IngoBürk:这是问题的一部分。我都试过了。该方法本身使用 Observable(另一个 db 提取),所以我想它必须这样做。
标签: typescript merge rxjs observable