首页 > 解决方案 > 加载另一个 API 数据的 1 个 API

问题描述

所以我试图使用来自一个 API 的数据(特别是一个国家的 iso3 代码)从另一个 API 加载它的 LatLong,然后在地图上绘制。

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

问题是当我将 latlong 数据加载到地图中时,它会出现未定义,但是当我从 preload() 加载 latlong 时,灾难数据是未定义的。

这是代码:在此处输入图像描述

此代码一直有效,直到调用 mapM() 并尝试从临时数组中加载 latlong 值,因为它们返回未定义,无论我在哪里这些 GET 查询始终未定义。

任何帮助都非常感谢,我对 JS 很陌生,所以放轻松!

标签: javascriptapimapboxp5.js

解决方案


通读参考资料通常可以最好地回答此类问题:

此方法是异步的,这意味着它可能不会在您的草图中的下一行执行之前完成。

这意味着您的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()函数完成时,它会自动调用该drawEarthequake()函数。

你可能想做类似的事情。


推荐阅读