博客 / 詳情

返回

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,很幸運,代碼裏只有一個地方用到了,如下圖:
圖1

於是繼續搜索wx.getLocation所在的getWXLocation函數,看看是在哪裏,都是什麼情況調用的,如下圖:
圖2

於是繼續搜索這行代碼所在的函數locationProcess,看看param是在哪裏傳入的,結果發現是在我們所使用的map.search函數裏調用的,如下圖:
圖3

傳入location之後,邏輯就不走上面走下面了,發現代碼調用了一個checkLocation,於是去看checkLocation的邏輯,如下圖:
圖4

圖5

找到getLocationParam函數之後,明白了location的數據類型及結構,如下圖:
圖6

那麼就可以梳理出map.search大體的流程:調用map.search時,如果options裏沒有location,就會調getWXLocation;如果有,就不凋。location屬性可以是字符串,逗號分隔,也可以是一個對象,直接包含latitudelongitude

完畢

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.