Существует два асинхронных вызова, один из них getLocation () , а другой - getWeather () .
В соответствии с текущим кодом они оба работают асинхронно, без определения потока последовательности.
Вам нужно синхронизировать оба из них так, чтобы первое местоположение выбиралось после того, как погода для этого местоположения была выбрана.
Ниже приведен способ синхронизации двух методов для выполнения одного за другим.
const getLocation = async() => {
const response = await fetch('http://ipinfo.io/json?token=(id given by ipinfo)')
if (response.status === 200) {
const data = await response.json()
return data.city
} else {
throw new Error('Unable to get the current location')
}
}
const getWeather = async(currentCity) => {
const response = await
fetch(`http://api.openweathermap.org/data/2.5/forecast?q=${currentCity}&units=metric&id=524901&APPID=(id given by openweathermap)`);
if (response.status === 200) {
const data = await response.json()
return data
} else {
throw new Error("Unable to get weather")
}
}
getLocation().then((city) => {
currentCity = city;
document.write(currentCity);
return city;
}).then((city) => {
return getWeather(city);
}).then((data) => {
console.log(data)
}).catch((err) => {
// Do something with it later
})
Путем объединения обещаний, как показано ниже, это достигается. Также изменил метод getWeather (), чтобы он принимал расположение в качестве параметра, чтобы сделать его повторно используемым модулем.
getLocation().then((city) => {
currentCity = city;
document.write(currentCity);
return city;
}).then((city) => {
return getWeather(city);
}).then((data) => {
console.log(data)
}).catch((err) => {
// Do something with it later
})