Не запускается цикл for. Не пойму почему не запускается цикл. Если вызвать функцию через консоль в браузере тогда все срабатывает

let objCity
    fetch("/json/city.list.json")
    .then(function(resp) {return resp.json()})
    .then(function(data) {
        objCity = data
    })

let coordLon;
let coordLat

function searchCity() {
    **for (key in objCity) {
        if (objCity[key].name == document.querySelector('.region__header').textContent) {
         coordLat = objCity[key].coord.lat;
         coordLon = objCity[key].coord.lon;
        return openweathermap(coordLat, coordLon, '.temp__num1')
        }
    }**
}

searchCity()


Ответы (1 шт):

Автор решения: SwaD

Проблема была в том, что функция searchCity запускалась сразу после запуска fetch. Функция получала на вход пустой массив, т.к. данные еще не были получены.

Необходимо изменить структуру вызовов данных. Обернуть fetch в Promise и записать данные в objCity когда придет ответ. После этого выполнять операции над полученными данными.

let objCity;
async function waitFeatch() {
  return new Promise((resolve, reject) => {
    fetch("/json/city.list.json")
      .then(function(resp) {return resp.json()})
      .then(function(data) {
        objCity = data;
        resolve();
      }).catch((e) => {
        reject(e);
    })
  })
  
}
let coordLon;
let coordLat;

waitFeatch().then((res) => {
  const finds = document.querySelector('.region__header').textContent;
  for (let key in objCity) {
    if (objCity[key].name === finds) {
      coordLat = objCity[key].coord.lat;
      coordLon = objCity[key].coord.lon;
      return openweathermap(coordLat, coordLon, '.temp__num1')
    }
  }
});
→ Ссылка