1. 程式人生 > >高德地圖 爬坑之旅

高德地圖 爬坑之旅

這一節主要是針對高德地圖的定位來說,我的需求是利用高德地圖來做詳細的定位,那麼因為它的定位是非同步執行,並且定位成功後 做回撥,這裡我就在想,把資料拿出來,做全域性共享。

因為是第一次接觸,所以我傻乎乎的直接利用塊作用域去取值,結果就是,在值還沒有取回來之前,函式已經執行完畢,導致後面的資料並沒有被返回,為此我為這個問題糾結了2個小時,在朋友的提示下,

非同步

對的,非同步,那麼我嘗試使用Promse來包容它的執行,然後在需要用到它的時候配合async/await來等待它完成取值,不言而喻。

完美解決了我取值的要求



export function Map(AMap){
  return new Promise((resolve,rejects) => {
    var map = new AMap.Map('container', {
      resizeEnable: true
    })
    map.plugin('AMap.Geolocation', function() {
      var geolocation = new AMap.Geolocation({
        // 是否使用高精度定位,預設:true
        enableHighAccuracy: true,
        // 設定定位超時時間,預設:無窮大
        timeout: 10000,
        // 定位按鈕的停靠位置的偏移量,預設:Pixel(10, 20)
        buttonOffset: new AMap.Pixel(10, 20),
        //  定位成功後調整地圖視野範圍使定位位置及精度範圍視野內可見,預設:false
        zoomToAccuracy: true,     
        //  定位按鈕的排放位置,  RB表示右下
        buttonPosition: 'RB'
      })
    
      geolocation.getCurrentPosition()
      AMap.event.addListener(geolocation, 'complete', onComplete)
      AMap.event.addListener(geolocation, 'error', onError)
    
    })
    function onComplete (data) {
      // data是具體的定位資訊
      resolve(data);
    }
  
    function onError (data) {
      // 定位出錯
      rejects(data);
    }

  })
}

使用


import {Map} from '../map/map';
 
 site = async () => {
    try {
      let result = await Map(window.AMap);
      console.log(result);
    } catch(err) {
      console.log(err);
    }
  }

獲得完美的結果