因此,我正在尝试使用来自一个API的数据(特别是一个国家的iso3代码)从另一个API加载其LatLong,然后在地图上进行绘制。
我遇到的问题是,我将preload()中的第一个API(自然灾难位置)加载到一个数组中,然后我无法访问该数组中的信息来获取列出的所有灾难的iso3,除非我对其进行访问来自draw()。
问题是当我然后将latlong数据加载到地图中时,它的状态为未定义,但是当我从preload()加载latlong时,灾难数据是未定义的。
这段代码一直有效,直到调用mapM()并尝试从temp数组中加载未定义的latlong值时,无论我在哪里,这些GET查询始终是未定义的。
我们非常感谢您的帮助,我对JS还是陌生的,所以轻松吧!
答案 0 :(得分:1)
通读the reference,通常可以最好地回答此类问题:
此方法是异步的,这意味着它可能不会在草图的下一行执行之前完成。
这意味着您的temp[i] = loadJSON(urlC);
行执行前,会触发但没有完成。
这是因为console.log(temp);
函数是异步,这意味着它在后台运行,而不是在主线程上运行。这通常很有用,因为您不希望每次发出新请求时都冻结代码,但这还会导致像您这样的错误。
要解决此问题,您可以在您的loadJSON()
行中添加一个回调函数。再次,从参考:
loadJSON()
请注意,function setup() {
noLoop();
var url =
'https://earthquake.usgs.gov/earthquakes/feed/v1.0/' +
'summary/all_day.geojson';
loadJSON(url, drawEarthquake);
}
function draw() {
background(200);
}
function drawEarthquake(earthquakes) {
// Get the magnitude and name of the earthquake out of the loaded JSON
var earthquakeMag = earthquakes.features[0].properties.mag;
var earthquakeName = earthquakes.features[0].properties.place;
ellipse(width / 2, height / 2, earthquakeMag * 10, earthquakeMag * 10);
textAlign(CENTER);
text(earthquakeName, 0, height - 30, width, 30);
}
函数已传递到drawEarthquake()
函数中。 loadJSON()
函数完成后,它将自动调用loadJSON()
函数。
您可能想做类似的事情。