问题形容:
在 微信小程序 里要做应用地址的关键字搜寻性能,比方搜“火车站”进去跟火车站相干的列表,可供选择。
于是引入: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
。
结束