当请求时,`RxJS`会在subcribe上抛出错误

时间:2018-04-28 14:31:14

标签: rxjs observable angular5

我正在使用observable发出请求。并试图描述价值。但是在打字稿上得到错误。任何帮助我?

我喜欢这样做:

public getCountry(lat,lan):Observable<any>{
    return this.http.get(this.googleApi+lat+','+lan+'&sensor=false').subscribe(data => {
        return this.genertedData(data);
    } );
}

但是得到如下错误:

Observable Error

更新

 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;
        })

    }

2 个答案:

答案 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')