LBS——JS非同步事件,同步執行(Promise方法應用)
阿新 • • 發佈:2018-12-21
此方法主要解決,多條非同步事件,同步執行的問題
(如高德api 前臺糾偏方法500點限制問題)
AMap.GraspRoad()
高德糾偏能座標糾偏至道路線上,但是方法座標引數限制在500個,
可用此方法解決點上限問題
/*
<script type="text/javascript" src ="https://cdn.polyfill.io/v2/polyfill.min.js?features=es6"></script>
*/
//1.定義事件
var map;//地圖物件(此處省略建立地圖物件程式碼)
var asc = [];//事件集合
var coord_s= [ [500],[500],[500]];//500點集合
//新增 事件集合
for (var i = 0; i < p1.length; i++) {
var a = new Promise(function (resolve) {
new AMap.GraspRoad().driving(coord_s[i], function (error, result) {
if (!error) {
resolve(result.data.points);//將結果放入結果集
} else {
console.log("座標轉換錯誤");
}
});
})
asc.push(a);
}
//2.將事件放入容器
var b = Promise.all(asc);
//3.啟動事件集合
b.then(function (result) {
var path1 = [];//點標記
var newPath = result;//返回的糾偏後的座標集合
//將座標合適轉換
for (var ti = 0; ti < newPath.length; ti++) {
for (var txy = 0; txy < newPath[ti].length; txy++) {
path1.push([newPath[ti][txy].x, newPath[ti][txy].y]);
}
}
//糾偏後軌跡劃入地圖
var strokeColor = 'green';
var newLine = new AMap.Polyline({
path: path1,
strokeWeight: 8,
strokeOpacity: 0.7,
strokeColor: strokeColor,
extData: "t",
showDir: true
})
map.add(newLine);
}).catch(function (reason) {
console.log('promise reject failed reason', reason);
})