乐趣区

关于微信小程序:getLocationfail-频繁调用会增加电量损耗可考虑使用-wxonLocationChange-监听地理位置变化

问题形容:

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

于是引入: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

结束

退出移动版