【问题标题】:`RxJS` throws error on subcribe when do request`RxJS` 在请求时在订阅时抛出错误
【发布时间】:2018-04-28 14:31:13
【问题描述】:

我正在使用 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;
        })

    }

【问题讨论】:

    标签: rxjs observable angular5


    【解决方案1】:

    问题在于您的返回类型声明为Observable&lt;any&gt;,而实际上您返回的是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);
        });
      }
    }
    

    【讨论】:

    • getCountryObservable如何映射细节?我需要添加过滤器
    • 请不要在一个帖子中提出多个问题。此外,这完全取决于服务器返回的实际数据是什么样的。我建议您创建一个包含更多详细信息的新问题。听起来您正在尝试完成一些相当基本的事情。
    • 问题是来自后端的对象是未知的。但得到上述的声明问题。这就是我添加的问题。请查看我编辑的更新。我在data.results 得到下划线我该如何处理?
    • Property 'results' does not exist on type 'Object' - 这就是错误
    • 如果你真的不知道你从后端收到的对象是什么样子的(听起来你确实遇到了更严重的问题)你可以使用any类型而不是Object(正如我的回答已经指出的那样)。更好的选择是遵循这个:stackoverflow.com/questions/36607979/…
    【解决方案2】:

    由于函数的返回类型是Observable&lt;any&gt;,我猜它应该只是返回this.http.get(this.googleApi+lat+','+lan+'&amp;sensor=false')

    【讨论】:

    • 更新此行 return this.http.get(this.googleApi+lat+','+lan+'&amp;sensor=false').map((data:any) =&gt; 帮助了我。感谢您的宝贵时间!
    猜你喜欢
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2017-03-21
    • 2021-06-17
    • 2018-07-05
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多