Я пытаюсь проверить достоверность функции, которую я написал в Typescript, в соответствии с наблюдаемыми RxJS, которая выбирает некоторые заказы из одного сервиса, а затем для каждого бронирования выбирает свое соответствующее местоположение и активность из другого сервиса.
Я просто пишу этот пост, чтобы проверить правильность написанного и спросить, могу ли я что-то сделать более эффективно.
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? Могу ли я что-нибудь сделать, чтобы сделать эту функцию более эффективной?