Как отменить angular http запрос в RX JS Эффекты - PullRequest
0 голосов
/ 21 января 2020

Я хочу отменить запрос http, сделанный в RX JS эффектах в angular 8.

@Effect() getReport$ = this.action$.pipe(
ofType(ActionTypes.GET_WIDGET),   
map(toPayload),
mergeMap(payload => {
  return this.dashboardService.getReport(payload).pipe(
    map(this.extractData),
    switchMap(result => {
      return observableOf(<ReceivedWidgetAction>{
        type: ActionTypes.RECEIVED_WIDGET,
        payload: result
      });
    }),
    catchError((err: Response | any) => {
      return this.handleReportError(err);
    }));

}));

Пожалуйста, дайте мне знать, как я могу сделать то же самое, используя angular 8. Также, пожалуйста, обратите внимание, что я не смогу использовать карту переключателей, так как несколько виджетов angular компоненты будут вызывать это действие с другой полезной нагрузкой.

1 Ответ

0 голосов
/ 27 января 2020

Мы можем отменить текущий запрос, используя оператор takeUnitil, создавая новое действие и отправляя то же действие в хранилище всякий раз, когда нам нужно отменить запрос.

 @Effect() getReport$ = this.action$.pipe(
ofType(ActionTypes.GET_WIDGET),   
map(toPayload),
mergeMap(payload => {
  return this.dashboardService.getReport(payload).pipe(
    map(this.extractData),
    switchMap(result => {
      return observableOf(<ReceivedWidgetAction>{
        type: ActionTypes.RECEIVED_WIDGET,
        payload: result
      });
    }),
    takeUntil(this.action$.pipe(ofType(DashboardActionTypes.CANCEL_REQUEST))),
    catchError((err: Response | any) => {
      return this.handleReportError(err);
    }));

}));
...