我正在使用observable发出请求。并试图描述价值。但是在打字稿上得到错误。任何帮助我?
我喜欢这样做:
public getCountry(lat,lan):Observable<any>{
return this.http.get(this.googleApi+lat+','+lan+'&sensor=false').subscribe(data => {
return this.genertedData(data);
} );
}
但是得到如下错误:
更新
public getCountry(lat,lan):Observable<any>{
return this.http.get(this.googleApi+lat+','+lan+'&sensor=false').map( data => {
data.results.map( array => {
let details = array.address_components.find( obj => obj.types.includes("country") );
this.countryDetails.countryLongName = details.long_name;
this.countryDetails.countryShortName = details.short_name;
})
return this.countryDetails;
})
}
答案 0 :(得分:2)
问题是你的返回类型指出Observable<any>
,你实际返回this.genertedData(data)
返回的任何内容(提示:听起来像你的函数中的拼写错误。猜猜它应该被称为generatedData
?)。
最佳做法是将http调用移动到服务中,并将subscribe
移动到组件中返回的Observable
。
可以这么说:
// => service.ts
public getCountryObservable(lat,lan):Observable<any> {
return this.http.get(this.googleApi+lat+','+lan+'&sensor=false');
}
您的组件看起来像:
// => component.ts
export class YourComponent {
constructor(public yourService: YourService) {}
getCountry(lat, lan): whateverDataTypeYourGeneratedDataReturns {
this.yourService.getCountryObservable(lat, lan).subscribe((data) => {
this.data = this.generatedData(data);
});
}
}
答案 1 :(得分:1)
由于函数的返回类型为Observable<any>
,我猜它应该只返回this.http.get(this.googleApi+lat+','+lan+'&sensor=false')