У меня есть запрос на получение, который является методом асинхронности. Чтобы получить данные, я делаю задержку на 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
?
Вы должны включить функцию в обещание или наблюдаемое. Или проще просто вернуть HTTP-запрос, а на другом конце установить тайм-аут.
Что-то вроде этого:
getWeatherForcastWithLocation(){
return this._http.get(uri).map(res => this.setItems(res.json(),false))
}
// In the receiving funtion
someFunction() {
setTimeout(() => /* code to execute */, 3000)
}
Вы не можете вернуть значение из операции 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);
});
});
}
this.setItems
?