1. 程式人生 > 其它 >通過async /await解決for迴圈裡巢狀query非同步函式存在的非同步問題!

通過async /await解決for迴圈裡巢狀query非同步函式存在的非同步問題!

技術標籤: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);
            }