RxJS выдает ошибку при подписке при выполнении запроса - PullRequest
0 голосов
/ 28 апреля 2018

Я делаю запрос, используя наблюдаемые. и пытается указать значение. Но получаю ошибку на машинописи. кто-нибудь на помощь мне?

Мне нравится это делать:

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 голосов
/ 28 апреля 2018

Проблема в том, что ваш тип возвращаемого состояния имеет значение 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);
    });
  }
}
0 голосов
/ 28 апреля 2018

Поскольку возвращаемый тип функции Observable<any>, я думаю, она должна просто возвращать this.http.get(this.googleApi+lat+','+lan+'&sensor=false')

...