getLocation() {
return new Promise((resolve, reject) => {
let that =this
wx.getLocation({
type: "gcj02",
isHighAccuracy: "true",
success: (res) => {
console.log(res)
console.log(res.longitude, 'getLocation获取当前经纬度')
console.log(res.latitude, 'getLocation获取当前经纬度')
uni.request({
url: this.globalData.URL + "subway/getSubway",
method: 'POST',
data: {
version: '251',
client: 'wxmp',
latitude: res.latitude + 0.001276,
longitude: res.longitude + 0.006256
},
success: (res) => {
console.log(res, '地铁站计算距离')
this.globalData.fujin_sub = res.data.data.result.geo_subway
this.globalData.jwd = res.data.data.result.location
uni.setStorageSync('getCity', res.data.data.result.addressComponent);
if (res.data.data.result.addressComponent.cityId == '0') {
uni.setStorageSync('localcityId', 9999);
} else {
uni.setStorageSync('localcityId', res.data.data.result.addressComponent.cityId);
}
uni.setStorageSync('localcityNm', res.data.data.result.geo_subway);
uni.setStorageSync('City', res.data.data.result.location);
resolve(res.data.data.result.location)
}
})
},
fail: () => {
reject('getLocation failed')
}
});
})
},
这段代码中的 getLocation() 函数包含了一个异步操作,即调用微信小程序的 wx.getLocation() 方法获取当前位置信息,并在成功后发送网络请求。由于这个过程是异步的,如果频繁调用 getLocation() 函数,可能会导致性能问题和用户体验问题。
为了优化这个问题,可以考虑以下几点:
缓存位置信息:如果你只需要获取当前位置信息一次,并且不需要实时更新,可以将获取到的位置信息缓存起来,避免重复调用
wx.getLocation() 方法。例如,在 App.vue 中定义一个变量来存储位置信息:
export default {
globalData:{
jwd: null
},
methods: {
async getLocation() {
if (this.globalData.jwd) {
// 如果已经获取过位置信息,则直接返回缓存的结果
return this.globalData.jwd
} else {
// 否则调用 wx.getLocation() 方法获取位置信息,并缓存结果
const res = await new Promise((resolve, reject) => {
wx.getLocation({
type: "gcj02",
isHighAccuracy: "true",
success: (res) => {
resolve(res)
},
fail: (err) => {
reject(err)
}
})
})
this.globalData.jwd = res.data.data.result.location
return this.globalData.jwd
}
}
}
}
在组件内使用
let app = getApp();//引入app组件实例
vat City = app.globalData.jwd//拿到app中定位获取的当前位置经纬度