uni.getlocation h5获取定位失败后,阻塞问题
uni.getlocation 在H5中,如果用户未开gps定位或者gps定位信号较差时,定位会失败。这种情况uni.getlocation也不会出现报错,也不会有后续执行,导致代码阻塞,体验极差。
解决方案1:拿不到定位或者定位失败这个时候可以尝试与后端配合使用ip定位进行定位,保证后续的执行。
解决方案2:引导用户开启gps定位(可以直接跳转到手机gps定位界面为最好,目前没有找到合适的方法,如果您知道得话,欢迎留言讨论)。
解决方案3:前端对uni.getLocation进行处理。因为未开定位时uni.getlocation根本不执行,所以在uni.getlocation中不管是success、fail、compelet都不会执行,这个时候我们可以添加一个宏任务。如果uni.getlocation未执行就可以通过setTimeout的执行进行返回,如果uni.getLocation执行了,就直接通过uni.getlocation进行返回。代码如下:
/**
* @description 通过uni.getLocation获取相关地理信息
* @returns
*/
export function getLatLng() {
return new Promise((resolve) => {
uni.getLocation({
type: 'wgs84',
timeout: 6,
fail: () => {
resolve({...getLocationLatLng(), errMsg: 'getLocation:fail'})
},
success: (res) => {
const params = { ...res, latitude: res.latitude, longitude: res.longitude }
uni.setStorageSync('LatLng', JSON.stringify(params));
resolve(params);
},
})
const timer = setTimeout(() => {
clearTimeout(timer)
resolve({...getLocationLatLng(), errMsg: 'getLocation:fail'})
}, 6000)
})
}