我有一个获取请求,这是一个asynchornouns方法。要获取数据,我会延迟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 :(得分:1)
您应该将函数包装到promise或observable中。或者更简单只返回http请求,另一端设置超时。
这样的事情:
getWeatherForcastWithLocation(){
return this._http.get(uri).map(res => this.setItems(res.json(),false))
}
// In the receiving funtion
someFunction() {
setTimeout(() => /* code to execute */, 3000)
}
答案 1 :(得分:0)
您无法从异步操作返回值(除非您使用ES2017
的新async / await功能),但您有两个选择:
(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);
});
});
}