高德地圖 爬坑之旅
阿新 • • 發佈:2019-01-04
這一節主要是針對高德地圖的定位來說,我的需求是利用高德地圖來做詳細的定位,那麼因為它的定位是非同步執行,並且定位成功後 做回撥,這裡我就在想,把資料拿出來,做全域性共享。
因為是第一次接觸,所以我傻乎乎的直接利用塊作用域去取值,結果就是,在值還沒有取回來之前,函式已經執行完畢,導致後面的資料並沒有被返回,為此我為這個問題糾結了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);
}
}
獲得完美的結果