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()
Asked
Active
Viewed 36 times
0
1 Answers
1
Проблема была в том, что функция 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')
}
}
});
SwaD
- 10,123
let objCity;можно избавиться, если в коде не используется, передав в resolve(); данные и получить их вthen((res)– SwaD Sep 30 '22 at 00:02