可观测数组的可观性 [英] Observable of array for array of Observables

查看:22
本文介绍了可观测数组的可观性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的Angular4应用程序中使用可观察数据时遇到以下情况,我无法开始工作:我想收集我所有预订日期的汇总数据作为概览页面。获取所有的天数是一个可观察的过程,每天都有一个我必须检索的当天的预订量列表-同样是一个可观察到的来源。根据这张表,我计算出一天的总结。所有这些摘要我都想在结果的可观察对象中发出。

我尝试过很多更复杂的东西,但是内心的观察总是没有等待完成,我得到的是空洞的总结。我已经回到了最基本的问题上,下面的内容应该是可行的:

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<T>]生成Observable<T[]>

另外:当我打算生成Observable<T>时,我在.map中使用的最内部的方法应该将可观察对象返回给T,还是仅仅是传入类型上的映射到T?

推荐答案

如何从可观测<;T>[]生成可观测<;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)));

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

这篇关于可观测数组的可观性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆