考虑以下示例:
var features = [];
$.getJSON(annotations_url, function(data) {
$.each(data, function(key, val) {
features.push(wkt_parser.read(val.annotation.wkt_data));
// at this point, "features" contains objects
});
});
annotationLayer.addFeatures(features);
// here, it is empty again
在这里,我希望features
能够持续增长。但是,在最后一行中,features
再次为空。
为什么会这样,我如何从features
(或者更确切地说是内部的匿名函数)中正确地将值推送到$.each
?
答案 0 :(得分:5)
$.getJSON
调用是异步的,因此在JSON请求完成之前可能正在执行annotationLayer.addFeatures
。在addFeatures
循环之后,在$.getJSON
调用内调用<{1}}方法。
如果您需要使用.each
执行更多内容,请考虑创建一个新函数(包括您需要调用的features
方法),然后在{{1}之后调用此新函数在addFeatures
调用中循环。
答案 1 :(得分:1)
这与$.getJSON
函数的异步行为有关。在annotationLayer.addFeatures(features);
功能中移动$.getJSON
。
features
变量未被“清除”;相反,当annotationLayer.addFeatures(features);
被执行时,它没有被填充。