问题形容:

微信小程序里要做应用地址的关键字搜寻性能,比方搜“火车站”进去跟火车站相干的列表,可供选择。

于是引入: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属性能够是字符串,逗号分隔,也能够是一个对象,间接蕴含latitudelongitude

结束