Машинопись: возвращаемое значение после задержки

0

У меня есть запрос на получение, который является методом асинхронности. Чтобы получить данные, я делаю задержку на 3 секунды, и после этого я ожидаю вернуть результат. Вот код:

getWeatherForcastWithLocation(){

             this._http.get(uri)
                    .subscribe( res =>this.setItems(res.json(),false));
            setTimeout(()=>{ 
                     return this.weatherStatatistic; 
            },3000);        

    return null;
}

Я хотел бы вернуть this.weatherStatatistic, однако он всегда возвращает null. Я знаю это из-за return null; в конце метода, но если я удалю его, возвращаемый тип метода будет void. Итак, как я могу вернуть this.weatherStatistic?

  • 0
    Что происходит в this.setItems ?
  • 0
    он просто устанавливает значения JSON в WeatherStatistic
Показать ещё 2 комментария
Теги:
angular

2 ответа

1

Вы должны включить функцию в обещание или наблюдаемое. Или проще просто вернуть HTTP-запрос, а на другом конце установить тайм-аут.

Что-то вроде этого:

getWeatherForcastWithLocation(){
  return this._http.get(uri).map(res => this.setItems(res.json(),false))
}

// In the receiving funtion
someFunction() {
    setTimeout(() => /* code to execute */, 3000)
}
0

Вы не можете вернуть значение из операции async (если вы не используете новую функцию async/await для ES2017), но у вас есть два варианта:

(1) Передайте обратный вызов для получения данных при их готовности:

getWeatherForcastWithLocation(cb: (stats: any) => void) {
    this._http.get(uri)
        .subscribe(res => {
            this.setItems(res.json(), false);
            cb(this.weatherStatatistic);
        });
}

(2) Верните обещание к данным:

getWeatherForcastWithLocation(): Promise<any> {
    return new Promise((resolve, reject) => {
        this._http.get(uri)
            .subscribe(res => {
                this.setItems(res.json(), false);
                resolve(this.weatherStatatistic);
            });
    });
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню