Не запускается цикл 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')
}
}
});