Angular 6: как получить http с интервалом - PullRequest
2 голосов
/ 20 марта 2019

Я не могу заставить это решение работать на мой код. Это мой оригинальный код, который работает без перерыва. Но, к сожалению, он делает слишком много запросов.

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';

constructor(private http: HttpClient) {}
  ngOnInit() {
  }
  getWeather() {
    this.response = this.http.get<Weather>(this.serviceUrl );
    this.response.subscribe(
      results => {
        this.weathers = results.properties.periods;
        console.log('this.weather ====> ', this.weathers);
      });
    }
}

Но теперь у меня возникают ошибки при добавлении интервала:

ОШИБКА TypeError: Невозможно прочитать свойство 'интервал' из неопределенного

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';

constructor(private http: HttpClient) {}
  ngOnInit() {
  }
  getWeather() {
    this.response = this.http.get<Weather>(this.serviceUrl );
    this.response.Observable.interval(60000).subscribe(
      results => {
        this.weathers = results.properties.periods;
        console.log('this.weather ====> ', this.weathers);
      });
    }
}

И я использовал этот следующий код, который не дает мне никаких ошибок, но он все еще ведет к бесконечному отклику, как будто интервал не имел никакого эффекта.

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { interval } from 'rxjs';
import { take } from 'rxjs/operators';
import { Subject } from 'rxjs';
takeFourNumbers = interval(50000).pipe(take(4));
constructor(private http: HttpClient) {}
  ngOnInit() {
  }
  getWeather() {
    this.response = this.http.get<Weather>(this.serviceUrl );
    this.response.subscribe(
      results => {
        this.weathers = results.properties.periods;
        console.log('this.weather ====> ', this.weathers);
        this.takeFourNumbers.subscribe(x => console.log('Next: ', x));
      });
    }
}

Что-то изменилось в последнее время с Angular 6+, где старые решения больше не работают? Я новичок в Angular.

1 Ответ

1 голос
/ 20 марта 2019

Попробуйте, как показано ниже:

import { interval } from 'rxjs';
import { map } from 'rxjs/operators'

interval(50000).pipe(
  map((x) => { /* your code here */ })
);
...