0

我有一个在 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
}
4

1 回答 1

0

不完全确定您想要什么...如果您的意思是出于某种原因要延迟该功能,这很容易做到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 函数。

于 2019-07-31T23:15:22.467 回答