1. 程式人生 > >LBS——JS非同步事件,同步執行(Promise方法應用)

LBS——JS非同步事件,同步執行(Promise方法應用)

此方法主要解決,多條非同步事件,同步執行的問題
(如高德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); })