#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