我正在从角度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时,不会输出任何值。并且“不能读取每小时的属性未定义”是错误的;因此,我怀疑服务器没有返回任何数据。
有什么我做错了吗?如何更改它以使其正常工作?
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)));
}