На подобные вопросы часто лучше всего ответить, прочитав ссылку :
Этот метод является асинхронным, то есть он может не завершиться до выполнения следующей строки в эскизе.
Это означает, что ваша строка 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()
.
Возможно, вы захотите сделать что-то подобное.