getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化

问题描述: 在微信小程序里要做使用地址的关键字搜索功能,比如搜“火车站”出来跟火车站相关的列表,可供选择。
于是引入:qqmap-wx-jssdk.js,并且在js中调用:

map.search({ keyword: search, // 关键字,跟一个input绑定 page_size: 20, auto_extend: 1, success: function (res) {}, fail: function (res) {}, });

使用时发现问题:每当input的内容改变时,触发search的调用,然后控制台就会报错message: "getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化",然后在短时间内(约10秒)无法再进行搜索,用户体验很差。
奇了怪了,我只是调了map.search,没调wx.getLocation啊,怎么老是报这个错呢?
解决方案 太长不看版本,直接给解决方案:search里面加个属性location,字符串,是当前所在经纬度用逗号隔开的。如:
map.search({ keyword: search, // 关键字,跟一个input绑定 page_size: 20, auto_extend: 1, location: `${latitude},${longitude}`, // 加上这个属性 success: function (res) {}, fail: function (res) {}, });

然后问题就解决了
定位问题过程 说说我是怎么定位问题的。
首先我们只调用了qqmap-wx-jssdk.js提供的api,却出来意料之外的错误,八成是qqmap-wx-jssdk.js的问题。打开此js,搜索wx.getLocation,很幸运,代码里只有一个地方用到了,如下图:
getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化
文章图片

于是继续搜索wx.getLocation所在的getWXLocation函数,看看是在哪里,都是什么情况调用的,如下图:
getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化
文章图片

于是继续搜索这行代码所在的函数locationProcess,看看param是在哪里传入的,结果发现是在我们所使用的map.search函数里调用的,如下图:
getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化
文章图片

传入location之后,逻辑就不走上面走下面了,发现代码调用了一个checkLocation,于是去看checkLocation的逻辑,如下图:
getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化
文章图片

getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化
文章图片

找到getLocationParam函数之后,明白了location的数据类型及结构,如下图:
getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化
文章图片

那么就可以梳理出map.search大体的流程:调用map.search时,如果options里没有location,就会调getWXLocation;如果有,就不凋。location属性可以是字符串,逗号分隔,也可以是一个对象,直接包含latitudelongitude
【getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化】完毕

    推荐阅读