封装了获取当前位置的函数,因为涉及到异步操作而且还要返回数据,所以使用了promise解决。

当没有promise的操作失败或操作成功时可以使用promise的快捷方法
return Promise.resolve(localCity)这个快捷方法

import axios from "axios";
/**
* @param {}
*/
export const getCurrentCity = () => {
const localCity = JSON.parse(localStorage.getItem("hkzf_city"));
if (!localCity) {
return new Promise((resolve, reject) => {
const myCity = new window.BMap.LocalCity();
myCity.get(async (res) => {
try {
const { data: reslust } = await axios.get(
"http://localhost:8080/area/info",
{
params: {
name: res.name,
},
}
);
localStorage.setItem("hkzf_city", JSON.stringify(reslust.body.label));
resolve(reslust.body.label);
} catch (e) {
reject(e);
}
});
});
} else {
// 没有的时候返回的是一个promise,为了保持统一,
//没有值的时候也要返回一个promise对象
// 此处promise不会失败,所以,此处只要返回一个成功的promise即可
return Promise.resolve(localCity)
}
};

封装的promis函数(异步操作函数怎么调用)

componentDidMount() {
this.getSwipers();
this.getGroups();
this.getNews();
// 这种方式不太好,mmp的这个牵扯到如果要setstate,那this的事就大了
getCurrentCity().then(
res => {
console.log('res',res)
}
).catch( error => {
console.log(error)
})

}
async componentDidMount() {
this.getSwipers();
this.getGroups();
this.getNews();
// 这个方法是很好的
const curCity = await getCurrentCity();
this.setState(() => {
return {
curCityName: curCity
}
})
}