正在加载1个API的另一个API的数据

时间:2018-12-18 11:33:10

标签: javascript api mapbox p5.js

因此,我正在尝试使用来自一个API的数据(特别是一个国家的iso3代码)从另一个API加载其LatLong,然后在地图上进行绘制。

我遇到的问题是,我将preload()中的第一个API(自然灾难位置)加载到一个数组中,然后我无法访问该数组中的信息来获取列出的所有灾难的iso3,除非我对其进行访问来自draw()。

问题是当我然后将latlong数据加载到地图中时,它的状态为未定义,但是当我从preload()加载latlong时,灾难数据是未定义的。

以下是代码:enter image description here

这段代码一直有效,直到调用mapM()并尝试从temp数组中加载未定义的latlong值时,无论我在哪里,这些GET查询始终是未定义的。

我们非常感谢您的帮助,我对JS还是陌生的,所以轻松吧!

1 个答案:

答案 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()函数。

您可能想做类似的事情。