Ionic 4和RxJS 6:离子本机HTTP get方法不从服务器返回数据

问题描述 投票:0回答:1

我正在从角度HttpClient模块迁移到ionic-native HTTP,因为使用标准的HttpClient模块无法访问第三方API。我想让应用程序的测试尽可能简单:这意味着,当我在计算机上为应用程序添加功能时,我可能会使用HttpClient;当我在实际设备中测试时,我也可以通过迁移到ionic-native HTTP并更改几行代码来实现。

当我在我的计算机上测试时,HttpClient在我的应用程序中运行得非常好。

我的service用HttpClient模块编写:

  getCaiyunForecast(): Observable<any> {
    return this.http.get(this.forecastUrl)
      .pipe(map((res: any) => { return res; }), catchError(this.processHttpmsg.handleError))
  }

我用service写的ionic-native HTTP

  getCaiyunForecast(): Observable<any> {
    return of(this._http.get(this.forecastUrl, {}, {})
      .then(res => { return JSON.parse(res.data) }, res => console.log(res.data)));
  }

当我在HomePage订阅服务时:

this.caiyunForecastService.getCaiyunForecast()
  .subscribe(res => {
    for (let i = 0; i < 3; i += 1) {
      let value = this.convertService.convertSkycon(res.result.hourly.skycon[i].value)
      this.hourlyWeather.push({
        temperature: res.result.hourly.temperature[i].value.toFixed(0),
        skycon: value,
        precipitation: res.result.hourly.precipitation[i].value.toFixed(1),
        wind: {
          speed: res.result.hourly.wind[i].speed,
          direction: res.result.hourly.wind[i].direction
        },
        cloudrate: res.result.hourly.cloudrate[i].value
      });
    }
  })

当我在我的服务(console.log(res.data))中执行console.log时,不会输出任何值。并且“不能读取每小时的属性未定义”是错误的;因此,我怀疑服务器没有返回任何数据。

有什么我做错了吗?如何更改它以使其正常工作?

angular rxjs ionic4 ionic-native
1个回答
0
投票

of不习惯将承诺转换为可观察的。使用from表示rxjs 6,使用fromPromise表示rxjs 5.x.

import { from } from 'rxjs';

而且功能

getCaiyunForecast(): Observable<any> {
    return from(this._http.get(this.forecastUrl, {}, {})
      .then(res => { return JSON.parse(res.data) }, res => console.log(res.data)));
}
© www.soinside.com 2019 - 2024. All rights reserved.