串行和并行组合可观察变量以从多个API提取数据

问题描述 投票:0回答:1

我正在尝试检查我用Typescript编写的函数的有效性,与RxJS observables一致,该函数从一个服务中获取一些预订,然后为每个预订从另一服务中获取其对应的位置和活动。

我只是写这篇文章来验证我所写内容的有效性,并询问我是否可以做得更有效率。

let params = new HttpParams();
params = params.append('status', 'C');
params = params.append('offset', offset.toString());
params = params.append('limit', limit.toString());
return this.http.get(`${this.environment.booking.url}/my/bookings`, { params }).pipe(
    mergeMap((bookings: Booking[]) => {
        if(bookings.length > 0) {
            return forkJoin(
                bookings.map((booking: Booking) =>
                    forkJoin(
                        of(booking),
                        this.activityService.getActivity(booking.activity),
                  this.locationService.getLocation(booking.finalLocation),
                    ).pipe(
                        map((data: [ Booking, Activity, Location ]) => {
                            let booking = data[0];
                            booking.activityData = data[1];
                            booking.finalLocationData = data[2];
                            return booking;
                        })
                    )
                )
            )
        }

        return of([]);
    }),
    catchError((err: HttpErrorResponse) => throwError(err))
);

我希望此功能返回预订清单以及相应的位置和活动。但是,更重要的是,我想验证我所做的事情是正确且明智的。我可以做些什么使它更清洁/更易于阅读(不是挑剔,请😁)?

换句话说,关于绩效,我也有关于绩效的后续问题。鉴于预订清单具有共同的活动和位置。有没有一种方法可以仅获取活动和位置而没有任何重复的HTTP请求? RxJS已经在后台处理了吗?我可以做些什么使此功能更有效吗?

javascript rxjs angular2-observables rxjs-pipeable-operators rxjs-observables
1个回答
0
投票
这是我将如何使用RxJS解决此问题的方法:
© www.soinside.com 2019 - 2024. All rights reserved.