我们的系统是实时上传用户的定位数据,但是上传定位的接口要用到token,所以当用户登出时及时清除token,当调用上传接口时会报错,此时我们用try catch捕获错误,捕获到错误后关掉定位监听。
export default {
data() {
return {
locationChangeFn: null,
// 发送用户定位
sendUserPosition(res){
const data = {
'latitude': res.latitude,
'longitude': res.longitude
}
try{
api.sendPosition(data).then(res => {
// 记录上传定位的时间
this.setLastSendTime(new Date().getTime())
}).catch(err=>{
console.log('上传地址接口返回err:', err)
})
}catch(err){
// js执行报错
console.log('js错误:', err)
// 关闭监听
wx.offLocationChange(this.locationChangeFn)
}
},
// 开启实时获取用户坐标
getIntervalPosition() {
console.log('[用户已授权定位,开启实时事件]')
const that = this
wx.startLocationUpdate({
success: res=> {
that.locationChangeFn = res => {
const appConfig = this.appConfig || uni.getStorageSync('appConfig')
const positionUpRate = 300
const lastSendPostionTime = uni.getStorageSync('lastSendPostionTime')
// 只有发生改变时才传给后台
if (isChange){
if ((parseInt(lastSendPostionTime) + parseInt(positionUpRate*1000)) < new Date().getTime()) {
that.sendUserPosition(res)
}
}
}
console.log('用户定位变动了,当前权限:', res.errMsg)
wx.onLocationChange(that.locationChangeFn)
},
fail: res=> {
console.log('[startLocationUpdate开启后台定位失败]', res)
// 如果是因为用户关闭了定位
if(res.errMsg === 'startLocationUpdate:fail auth deny'){
this.setAgreeLocationPermisson('false')
console.log('用户拒绝(关闭了)定位')
}
},
complete: msg => {
}
})
},