Javascript 如何在rxjs中连接流?

Javascript 如何在rxjs中连接流?,javascript,rxjs,Javascript,Rxjs,我正在尝试使用rxjs从服务器获取数据: class HolidaysService { constructor() { this.restService = newRestService(); } public getHolidaysByYear(year: number): Observable<Date[]> { const endpoint = `/get${year}`; return this.re

我正在尝试使用rxjs从服务器获取数据:

class HolidaysService {
    constructor() {
        this.restService = newRestService();
    }

    public getHolidaysByYear(year: number): Observable<Date[]> {
        const endpoint = `/get${year}`;
        return this.restService.GET(endpoint, { cache: true })
            .pipe(map(dates: any)=> dates.map((item: string) => new Date(item)))
    }

    public getHolidaysByYears(years: number[]): Observable<Date[]> {
        const requests = years.reduce((acc,v)=>acc.concat(this.getHolidaysByYear(v)),[])
        return forkJoin(...requests).pipe(scan((acc,v)=>acc.concat(v), []))
    }

}

// We call it:
const holidayService = new HolidaysService();
const substriction1 = holidayService.getHolidaysByYear(2020)
    .subscribe(
        res => console.log('res', res),
        err => console.warn(err)
    );
substriction1.unsunscribe();

什么都不管用。我在控制台和数据中看不到res。可能是什么错误?

这是您编写
承诺的方式。使用
forkJoin在RxJS中模拟所有

public getHolidaysByYears(years: number[]): Observable<Date[]> {
    const requests = years.map(year => this.getHolidaysByYear(year));
    return forkJoin(requests).pipe(concatAll());
}
public getholidaysbyears(年份:number[]):可见{
const requests=years.map(year=>this.getholidaysbyear(year));
返回forkJoin(requests.pipe(concatAll());
}

请注意,我使用的是
concatAll
操作符,因为
forkJoin(requests)
将为您提供
可观察的
,即每年的假日日期数组。由于您的返回类型是
可观察的
,这就是为什么我使用
concatAll
操作符来连接生成的数组,并获得
可观察的
,而不是
可观察的

,这就是您编写
Promise的方式。RxJS中的所有
模拟与
forkJoin

public getHolidaysByYears(years: number[]): Observable<Date[]> {
    const requests = years.map(year => this.getHolidaysByYear(year));
    return forkJoin(requests).pipe(concatAll());
}
public getholidaysbyears(年份:number[]):可见{
const requests=years.map(year=>this.getholidaysbyear(year));
返回forkJoin(requests.pipe(concatAll());
}
请注意,我使用的是
concatAll
操作符,因为
forkJoin(requests)
将为您提供
可观察的
,即每年的假日日期数组。由于您的返回类型是
Observable
,因此我使用
concatAll
操作符连接结果数组,并获得
Observable
而不是
Observable