项目场景:
基于鸿蒙系统做的天气查询项目
项目场景:
网络获取每个城市的天气数据,将数据根据天气展示出来.第一步将数据能够通过网络获取的数据显示出来
问题描述
获取天气的数据,使用异步获取时,为什么不直接使用request.then()?
原因分析:
request.request(url) 表示调用了 request 对象的 request 方法,并且传入了 url 参数。
这个方法返回的 result 应该是一个 Promise 对象,因此可以使用 .then() 方法来处理这个 Promise。
request.then() 这种写法是不正确的,因为 .then() 是 Promise 对象的方法,而不是 request 对象的方法。
解决方案:
提示:这里填写该问题的具体解决方案:
import { weathermodel } from '../viewmodel/weathermodel'
import http from '@ohos.net.http'
class getWeatherUtil{
getWeather(citycode:number){
return new Promise<weathermodel>((reslove,reject)=>{
let request =http.createHttp()
let url='https://restapi.amap.com/v3/weather/weatherInfo?city=${citycode}&key=41ac10c2a94bb7121c8e7c41d2be30e3&extensions=all'
//获取数据,因为是异步获取所以res才是要获取的数据
let result=request.request(url)
result.then((res)=>{
if(res.responseCode===200){//说明数据返回成功
console.log(res.result.toString());
reslove(JSON.parse(res.result.toString()))
}
})
.catch((err)=>{
console.log(err)
})
})
}
async getWeathers(citycode:Array<number>){
let promises:Array<Promise<weathermodel>>=[]
for(let i=0;i<citycode.length;i++){
promises.push((this.getWeather(citycode[i])))
}
await Promise.all(promises).then(result=>{
for(const element of result){
console.log(element.forecast[0].city)
}
})
}
}
let getweatherUtil=new getWeatherUtil()
export default getweatherUtil as getWeatherUtil
测试:
测试:
1.
let getweather=new getWeatherUtil()
export default getweather as getWeatherUtil
import getweatherUtil from "../viewmodel/getWeaterUtil"
@Entry
@Component
struct Index {
build() {
Column() {
Button("测试").fontSize(40)
.onClick(()=>{
getweatherUtil.getWeather()
})
}
}
}
测试结果:
测试成功