Как отменить предварительный просмотр неполных HTTP-запросов одного и того же типа в службе в Angular 2? - PullRequest
0 голосов
/ 25 февраля 2020

Я использую Angular 9 в своем веб-приложении. Я использую много сервисов для подключения к веб-сервису. Иногда много одинаковых запросов отправляются в службу. Возможно, когда пользователь нажимает на кнопку несколько раз.

Я хочу отменить предварительный просмотр неполных запросов на все мои услуги. Какое лучшее решение? (Может быть, используя RX JS)

Это одна из моих сервисных функций:

constructor(private http: HttpClient) {}

getList(options?: ApiListOptions) {
  return this.http.post<ApiResponse<UserGet[]>>(
    environment.apiRoot + 'user/list',
    options,
    { headers: this.headers() }
  );
}

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Для вашего конкретного случая c, например частых нажатий кнопок, вы можете использовать switchMap() в сочетании с debounceTime(), чтобы ограничить частоту действий и http-вызовов. Вы можете использовать Subject для триггера действия вместо метода компонента

<button click="getList.next()">click</button>

getList=new Subject()
getList.pipe(debounceTime(2000),switchMap(()=>
this.http.post<ApiResponse<UserGet[]>>(
    environment.apiRoot + 'user/list',
    options,
    { headers: this.headers() }
  );
)).subscribe()
0 голосов
/ 25 февраля 2020

Пожалуйста, попробуйте ниже с оператором takeUntil rx js, вы сможете сделать то же самое.

export class YourComponent {
   protected ngUnsubscribe: Subject<void> = new Subject<void>();

   [...]

   public httpGet(): void {
      this.http.get()
         .takeUntil(this.ngUnsubscribe)
         .subscribe( (data) => { ... })
   }

   public ngOnDestroy(): void {
       this.ngUnsubscribe.next();
       this.ngUnsubscribe.complete();
   }
}
...