Как я могу вызывать REST API рано и часто, используя RxJS и Angular 8?

#javascript #angular #typescript #rxjs

#javascript #angular #typescript #rxjs

Вопрос:

У меня есть REST API, который возвращает список значений.

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

Проводя некоторые предварительные исследования, я делаю следующее;

В моем классе обслуживания:

 getFooList(): Observable<Foo> {
  return interval(FIVE_MINUTES).pipe(
    switchMap(() => this.http.get<Foo>(url, HTTP_OPTIONS))
  );
}
  

и это в моем компоненте

 fooList: Foo[] = [];

ngOnInit(): void {
  this.loadFooList();
}

private loadFooList() {
  this._fooService.getFooList().subscribe(
    (fooList) =>  this.fooList = fooList,
    (err) => console.error(err)
  );
}
  

Проблема в том, что первый вызов не выполняется до истечения первых пяти минут.

Какой вариант у меня есть для вызова API сразу, а затем каждые пять минут? Кроме перемещения interval кода в класс component (я бы хотел сохранить его в многоразовом одноэлементном сервисе) и вызова API сначала один раз, а затем настройки интервала (что отдает ненужным дублированием кода).

Ответ №1:

Используйте timer вместо interval: return timer(0, FIVE_MINUTES).pipe(// etc . ( 0 это начальная задержка).

https://www.learnrxjs.io/learn-rxjs/operators/creation/timer