Загрузка 1 API данных другого API

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

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

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

Вот код: Загрузка 1 API данных другого API

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

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

Скорее всего, вы пытаетесь получить доступ к асинхронным данным в синхронном коде. Это может быть обработано с помощью обратных вызовов, обещаний или async await. Кстати, почему вы разместили снимок экрана своего кода вместо реального кода?

HynekS 18.12.2018 12:43

Я не знаю, я не пользовался этим сайтом какое-то время, но вижу, что на него сложнее ответить, ха-ха, к тому же все это почти ничего для меня не значило, будет ли это трудно исправить?

Arthur Verrept 18.12.2018 12:51

В будущем, пожалуйста, публикуйте минимальный воспроизводимый пример вместо скриншота вашего кода.

Kevin Workman 18.12.2018 18:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
37
1

Ответы 1

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

This method is asynchronous, meaning it may not finish before the next line in your sketch is executed.

Это означает, что ваша линия temp[i] = loadJSON(urlC); запускает но не заканчивает перед выполнением вашей линии console.info(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().

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

Другие вопросы по теме