Javascript : Anonymous function, 获取全局变量

标签 javascript function anonymous

经过几个小时的搜索,我的下面的代码有问题。 事实上,我离我想的答案不远,但我仍然被封锁了……

我有一个在循环内调用的匿名函数,我想访问和刷新全局变量,但我尝试使用 window.myvariable 和另一个函数,但没有任何反应......

这是我的代码:

for (var i = 0; i < SHP_files.length; i++) {
            shapefile = new Shapefile({
                shp: "shp/polygon/"+SHP_files[i]+".shp",
                dbf: "shp/polygon/"+SHP_files[i]+".dbf",
                }, function(data) {

                    polygon_layer.addLayer(new L.GeoJSON(data.geojson,{onEachFeature: onEachFeature, style: polygonStyle}));
                    polygon_layer.addTo(map);
                    console.log(polygon_layer.getLayers()); // IS OK
                });
        };
        console.log(polygon_layer.getLayers()); // IS EMPTY !!

那么,我如何才能转换这个匿名函数,以便获得我可以从我的代码中访问的东西?

非常感谢,抱歉我的英语不是很好......

最佳答案

这是异步代码执行的典型问题。您的示例代码不会从上到下执行。特别是,在 Shapefile 完成它正在做的任何事情之前,您的匿名函数不会被执行。同时,您的 JS 会按顺序执行。因此,上面代码的最后一行可能会在匿名函数之前执行。

要解决此问题,您需要触发任何依赖于回调中的 Shapefile 响应的代码:

for (var i = 0; i < SHP_files.length; i++) {
    shapefile = new Shapefile({
        shp: "shp/polygon/"+SHP_files[i]+".shp",
        dbf: "shp/polygon/"+SHP_files[i]+".dbf",
        }, function(data) {
            polygon_layer.addLayer(new L.GeoJSON(data.geojson,{onEachFeature: onEachFeature, style: polygonStyle}));
            polygon_layer.addTo(map);
            executeMoreCode();
        });
};

function executeMoreCode() {
    console.log(polygon_layer.getLayers()); // IS OK
}

关于Javascript : Anonymous function, 获取全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19168440/

相关文章:

javascript - Protractor 测试模态是否可见

c++ - C/C++ 函数中的 LoadLibrary 和 GetProcAddress

PHP 5.3 和匿名函数默认值?

clojure - Clojure 中的匿名宏

c# - foreach 在匿名类型上

javascript - 创建自定义指令不起作用

JavaScript:继承和常量声明

c - 带有指针的 C 错误中的 Malloc 函数

python - 为什么控制台卡在我用 python 解决 9X9 数独板的最后一个函数上?

javascript - Rxjs:轮询数据直到满足谓词