React租房应用localStorage与async、await加载案例
获取当前城市信息,我们将获取定位城市的代码封装到一个函数中,哪个页面需要获取定位城市,直接调用该方法即可
在utils目录中,创建一个文件,在这个文件中进行封装
创建并且导出获取定位城市的函数 getCurrentCity
判断localStorage中是否有定位信息
如果没有,我们通过获取定位信息来获取当前定位城市,获取完了需要存到本地存储中
如果有,直接使用就好
import axios from 'axios'
export const getCurrentCity = () => {
// 获取本地存储中是否有
let localCity = JSON.parse(localStorage.getItem('localCity'))
if (!localCity) {
// 如果没有,就需要获取当前定位城市
// 利用 promis 来解决异步数据的返回
return new Promise((resolve, reject) => {
try {
// 获取当前城市信息
var myCity = new window.BMap.LocalCity();
myCity.get(async res => {
// 当获取到对应的城市信息了后,我们需要请求我们自己的服务器
const { data: infoRes } = await axios.get('http://localhost:8080/area/info', {
params: {
name: res.name
}
})
if (infoRes.status != 200) {
console.error(infoRes.description)
return
}
console.log(infoRes);
// res.data.body
// 保存在本地存储中
localStorage.setItem('localCity', JSON.stringify(infoRes.body))
// 返回城市的数据
resolve(infoRes.body)
});
} catch (error) {
// 进入到catch代码块 说明调用失败了
reject(error)
}
})
}
// 如果有,我们直接返回城市信息就好,返回一个成功的promis对象即可
return Promise.resolve(localCity)
}
将定位的城市信息添加到 cityList和cityIndex中
// 获取当前城市定位信息
let curCity = await getCurrentCity()
// 将当前城市数据添加到 cityList
cityList['#'] = curCity
// 将当前城市数据添加到 cityIndex
cityIndex.unshift('#')
原文 https://blog.csdn.net/weixin_45583708/article/details/103327739