как я могу реализовать это правильно, чтобы он подписывался только на последнее заданное значение? - он работал нормально для меня, используя простой setInterval, но я хочу переключиться на Observables, чтобы лучше понять это.
проблема, очевидно, в том, что я подписываюсь дважды, и если я завершу подписку на функцию, все равно будет запущена подписка с интервалом, и я не смогу завершить ее, потому что мне нужны ее интервалы ..
Это компонент, в котором я вызываю данные (cityName может постоянно меняться в зависимости от ввода пользователя и, следовательно, изменять запрос, выполняемый http
submitData2(cityName) {
Observable.timer(0, 10000)
.takeWhile(() => this.alive) // only fires when component is alive
.subscribe(() => {
this._weatherService.getWeather(cityName)
.subscribe(weathers => {
this.weathers = weathers;
console.log(weathers);
this.currentImg();
},
err => {console.log(err)},
() => {console.log('end')}
);
});
}
Это услуга, которая делает запрос в зависимости от названия города:
getWeather(city): Observable<any[]> {
return this.http.get('weather/getCity/' + city)
.map(res => res.json()) ;
}