通過async /await解決for迴圈裡巢狀query非同步函式存在的非同步問題!
阿新 • • 發佈:2021-02-02
技術標籤:arcgis-js
//定義圖層 var gLayer = new _GraphicsLayer(); var pLayer = new _GraphicsLayer(); map.addLayers([pLayer, gLayer]); //全域性物件 設定查詢引數 var intersector, area_id; var queryTask = new _QueryTask("********/MapServer/2"); var query = new _Query(); query.outFields = ["*"]; query.spatialRelationship = Query.SPATIAL_REL_INTERSECTS; query.returnGeometry = true; //獲取巡檢片區 getInspArea(); function getInspArea() { $.ajax({ type: "get", url: "./test0128.ashx?m=getInspectionArea", dataType: "json", success: function (data) { console.log(data); QueryByInsparea(data); } }); } //通過巡檢片區來查詢 async function QueryByInsparea(data) { for (var i = 0; i < data.length; i++) { var inspection_area = data[i]; area_id = inspection_area.AREA_ID; //獲取片區要素類 var path = inspection_area.PATH; intersector = new _Polygon(JSON.parse(path).geometry); pLayer.add(new _Graphic(intersector, new SimpleFillSymbol())); query.geometry = intersector; //進行查詢 await queryTask.execute(query, getIntersect); } } //獲取相交部分 function getIntersect(result) { //console.log(result); //查詢到得要素 var features = result.features; var gemetries = []; for (var i = 0; i < features.length; i++) { var feature = features[i]; gemetries.push(feature.geometry); feature.setSymbol(new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([0, 0, 255]), 5)); //gLayer.add(feature); } //對查詢到得要素進行合併 var union = geometryEngine.union(gemetries); //合併要素與片區要素進行相交分析 var intersect = geometryEngine.intersect(union, intersector); console.log(intersect); var intersectGra = new _Graphic(intersect, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 255, 0]), 5)); gLayer.add(intersectGra); }