Как отменить простой вызов функции без "lodash" внутри Angular httpClient errorCatch

У меня есть функция, которая вызывается внутри Angular HttpClient catchError. Я хочу отменить вызов функции без использования Lodash. Здесь нельзя использовать debounceTime, так как функция не является темой. Есть ли эквивалент ES5/ES6?

this.http.get(`api/test`)
  .pipe(
    catchError((err) => {
      alertUser(err); // Option 1 - debounce here 
      return throwError(err);
    }),
  );
alertUser(err) {
  alert(err.text); // Option 2 - debounce here
}

1 ответ

Не совсем уверен, что вы хотите... если вы имеете в виду, что вы хотите по какой-то причине отложить функцию, это легко сделать с timer

return timer(1000).pipe( // 1000 ms delay
  tap(t => alertUser(err)), // call this in tap
  switchMapTo(throwError(err)) // then throw the error again
);

если вы действительно хотите отменить его с помощью rxjs и убедиться, что он запускается только каждые x секунд, вам нужно добавить тему для использования, предположив, что у вас есть AlertService, например:

private alertSource = new Subject();
alert$ = this.alertSource.pipe(debounceTime(1000)); //debounce the subject
constructor() {
  this.alert$.subscribe(err => alert(err)); // subscribe to it
}

alertUser(err) {
  this.alertSource.next(err); // send through subject
}

затем просто вызовите свою функцию alertUser для служб оповещения по мере необходимости.

Другие вопросы по тегам