Вход

Просмотр полной версии : Как отправить запрос с использованием оператора interval?


zlodiak
12.12.2017, 12:47
Помогите пожалуйста из angular5 отправлять запрос с периодом 5 сек, использую библиотеку rxjs. знаю, что с точки зрения возможных нагрузок на сервер, это не лучший способ, но сейчас мне интересен именно он.

Вот мой сервис:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
// import { interval } from 'rxjs/observable/interval';
import 'rxjs/add/observable/interval';

@Injectable()
export class TasksService {
constructor(private http: HttpClient) { };
getUserTasks(userId): Observable<any> {
return this.http.interval(5000).get('http://127.0.0.1:8000/app_tasks/user_tasks?user_id=' + userId);
};
}


Вот мой компонент, в котором происходит подписка:

ngOnInit() {
let userId = 1;
this.getUserTasks(userId);
}

private getUserTasks(userId): void {
this.tasksService.getUserTasks(userId).subscribe(
data => {
this.userTasks = JSON.parse(data);
console.log('userTasks', this.userTasks);
}
)
};


Но bash выводит такое сообщение об ошибке:

ERROR in src/app/services/tasks.service.ts(16,21): error TS2339: Property 'interval' does not exist on type 'HttpClient'

destus
12.12.2017, 13:22
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/interval';
import 'rxjs/add/operator/switchMap';

private getUserTasks(userId): void {
Observable
.interval(5000)
.switchMap(() => this.tasksService.getUserTasks(userId))
.subscribe(
data => {
this.userTasks = JSON.parse(data);
console.log('userTasks', this.userTasks);
}
)
};

zlodiak
12.12.2017, 15:07
спасибо. а принципиально ли использовать interval именно в компоненте? если я его перенесу в сервис, это будет тоже хорошее решение?

destus
12.12.2017, 15:12
zlodiak,
не принципиально