@Vadimqa

Angular subscribe(): Cannot read property 'subscribe' of undefined?

Сервис отдает данные в подписку в неверном формате, помогите привести к нужному виду.

Сервис

getStats() {

            let statsLS = localStorage.getItem('stats');
            let slt = +localStorage.getItem('slt');

            let date = new Date();
            let time = date.getTime();

            if(statsLS === null || slt < time) {
                this.http.get('/server/api/statsService').subscribe((data: any) => {
                    this.stats = data;
                            let date = new Date();
                            let time = date.getTime()+60000+'';
                            localStorage.setItem('stats',JSON.stringify(this.stats));
                            localStorage.setItem('slt',time);
                            return this.stats;  
                    });
                } else {
                    return JSON.parse(statsLS);
                    }

        }

}


Компонент

ngOnInit() { 
this.statsService.getStats().subscribe((data: any) => console.log(data));
}
  • Вопрос задан
  • 1383 просмотра
Решения вопроса 1
sHinE
@sHinE
веб-разработчик, php/js/mysql и сопутствующее
Вы в коде getStats() вообще ничего не возвращаете.
Вы возвращаете данные из функции, которая у вас является подписчиком http.get.
Насколько я помню, вам надо объявить внутри getStats() объект типа Observable() и вернуть его. Как-то так в общем:
getStats()
{
    return new Observable<any>((observer) => {
        let statsLS = localStorage.getItem('stats');
        let slt     = +localStorage.getItem('slt');

        let date = new Date();
        let time = date.getTime();

        if (statsLS === null || slt < time) {
            this.http.get('/server/api/statsService').subscribe((data: any) => {
                this.stats = data;
                let date   = new Date();
                let time   = date.getTime() + 60000 + '';
                localStorage.setItem('stats', JSON.stringify(this.stats));
                localStorage.setItem('slt', time);
                observer.next(this.stats);
            });
        } else {
            observer.next(JSON.parse(statsLS));
        }

    });
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы