我正在尝试检查我在 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 在后台处理了?我可以做些什么来提高这个功能的效率吗?