问题形容:
在微信小程序里要做应用地址的关键字搜寻性能,比方搜“火车站”进去跟火车站相干的列表,可供选择。
于是引入: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
,很侥幸,代码里只有一个中央用到了,如下图:
于是持续搜寻wx.getLocation
所在的getWXLocation
函数,看看是在哪里,都是什么状况调用的,如下图:
于是持续搜寻这行代码所在的函数locationProcess
,看看param
是在哪里传入的,后果发现是在咱们所应用的map.search函数里调用的,如下图:
传入location
之后,逻辑就不走下面走上面了,发现代码调用了一个checkLocation
,于是去看checkLocation
的逻辑,如下图:
找到getLocationParam
函数之后,明确了location的数据类型及构造,如下图:
那么就能够梳理出map.search
大体的流程:调用map.search
时,如果options
里没有location
,就会调getWXLocation
;如果有,就不凋。location
属性能够是字符串,逗号分隔,也能够是一个对象,间接蕴含latitude
和longitude
。
结束