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
,很幸运,代码里只有一个地方用到了,如下图:文章图片
于是继续搜索
wx.getLocation
所在的getWXLocation
函数,看看是在哪里,都是什么情况调用的,如下图:文章图片
于是继续搜索这行代码所在的函数
locationProcess
,看看param
是在哪里传入的,结果发现是在我们所使用的map.search函数里调用的,如下图:文章图片
传入
location
之后,逻辑就不走上面走下面了,发现代码调用了一个checkLocation
,于是去看checkLocation
的逻辑,如下图:文章图片
文章图片
找到
getLocationParam
函数之后,明白了location的数据类型及结构,如下图:文章图片
那么就可以梳理出
map.search
大体的流程:调用map.search
时,如果options
里没有location
,就会调getWXLocation
;如果有,就不凋。location
属性可以是字符串,逗号分隔,也可以是一个对象,直接包含latitude
和longitude
。【getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化】完毕
推荐阅读
- ArrayList源码深度剖析,从最基本的扩容原理,到魔幻的迭代器和fast-fail机制,你想要的这都有!!!
- OAK常见报错|报错Failed to allocate graph: MYRIAD device is not opened.
- OAK常见报错|报错ImportError: numpy.core.multiarray failed to import
- Assertion|Assertion failure in - [UITableView _dequeueReusableViewOfType:withIdentifier:]
- 突然很想你
- 医疗|靠频繁跨界“炒作”股价一年涨近285%,手套龙头康隆达连遭监管16问
- rsync 错误 failed: Permission denied (13)
- Fix Failed to download metadata for repo
- win8蓝牙鼠标频繁断线问题如何处理
- chrome 音乐 视频自动播放 忽略 Uncaught (in promise) DOMException: play() failed