Из вашего примера ясно, что служба получает его каждые 2 секунды из-за
timer(1000, 2000).subscribe(() => {
В компоненте ваша подписка просто без интервала.Поскольку getTask не генерирует событие позже, ничего не будет обновлено.
Либо используйте также таймер в компоненте (не элегантно), либо создайте .next
вручную:
В службе:
public myObserver$: Subject<any>;
[...]
constructor(private http: HttpClient) {
timer(1000, 2000).subscribe(() => {
this.http.get<Task[]>(this.tasksURL).subscribe(value => {
this.tasks = value;
myObserver$.next(this.tasks);
)}
}); // fetches and update the array every 2 seconds
}
Затем вы можете подписаться на myObserver$
в сервисе вместо getTasks()
метода.Вам не нужен таймер в компоненте.
Вам также следует сохранить подписку в компоненте в переменной:
private subscriptionRef: Subscription;
constructor(private taskService: TaskService) {
this.subscription = this.taskService.getTasks().subscribe(tasks => { // this is triggered only once, why ?
this.tasks = tasks;
});
}
, чтобы можно было отписаться в методе ngOnDestroy.
ngOnDestroy(): void {
this.subscription.unsubscribe();
}