Загрузка 1 API данных другого API - PullRequest
0 голосов
/ 18 декабря 2018

Итак, я пытаюсь использовать данные (в частности, код iso3 страны) из одного API, чтобы загрузить свой LatLong из другого API, чтобы затем нанести на карту.

Проблема, с которой я столкнулся, заключается в том, что я загружаю первый API (места стихийных бедствий) в preload () в массив, а затем я не могу получить доступ к информации внутри этого массива, чтобы получить iso3 для всех перечисленных катастроф, если толькоЯ обращаюсь к нему из draw ().

Проблема в том, что когда я загружаю данные latlong в карту, они отображаются как неопределенные, но когда я загружаю данные latlong из preload (), данные бедствия не определяются.

Вот код: enter image description here

Этот код работает до тех пор, пока не будет вызван mapM () и попытается загрузить значения latlong из временного массива по мере их поступления.назад не определено, где бы я ни находил эти GET-запросы, один всегда не определен.

Любая помощь очень ценится, я довольно новичок в JS, так что будьте спокойны!

1 Ответ

0 голосов
/ 18 декабря 2018

На подобные вопросы часто лучше всего ответить, прочитав ссылку :

Этот метод является асинхронным, то есть он может не завершиться до выполнения следующей строки в эскизе.

Это означает, что ваша строка temp[i] = loadJSON(urlC); запускает , но не завершает до выполнения строки console.log(temp);.

Это потому, что loadJSON()функция асинхронная , что означает, что она работает в фоновом режиме, а не в основном потоке.Как правило, это полезно, потому что вы не хотите, чтобы ваш код зависал каждый раз, когда вы делаете новый запрос, но это также приводит к таким ошибкам, как ваша.

Чтобы обойти это, вы можете добавить callbackфункция для ваших 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().

Возможно, вы захотите сделать что-то подобное.

...