У вас есть две асинхронные операции, для которых вторая должна использовать результаты первой операции AJAX для продолжения:
fetch(geocodeURL)
.then(response => {
return response.json();
})
.then(data => {
let max = data.results[0].geometry.location;
console.log(max);
let max1 = max.lat+',' + max.lng;
console.log(max1);
lat1 = max1; <-- lat1 is used in second AJAX call
console.log(lat1);
})
console.log(geocodeURL);
И несколько строк спустя:
const proxy = 'https://cors-anywhere.herokuapp.com/';
const api =
`${proxy}https://api.darksky.net/forecast/aki_key/${lat1}`; // <-- lat1 will be undefined
Итак, когда вынажмите кнопку поиска, первая сработает, а когда вернется, заполнит переменную lat1
.Так как это результат Обещания, оно сработает, как только оно будет выполнено, в то время как основной поток продолжит работу и выполнит следующий оператор fetch(api)
, не дожидаясь установки lat1
.Просто переместите второй вызов AJAX в разрешение Promise:
event.preventDefault();
const input = document.querySelector('.searchForm-input').value;
// remove whitespace from the input
const searchQuery = input.split(' ').join('+');
// print `searchQuery` to the console
console.log(searchQuery);
let geocodeURL = `https://maps.googleapis.com/maps/api/geocode/json?
address=${searchQuery}&key=api_key`;
fetch(geocodeURL)
.then(response => {
return response.json();
})
.then(data => {
let max = data.results[0].geometry.location;
console.log(max);
let max1 = max.lat+',' + max.lng;
console.log(max1);
lat1 = max1;
console.log(lat1);
let temperatureDegree = document.querySelector('.temperature-
degree');
let locationTimezone = document.querySelector('.location-timezone');
let echos = document.querySelector('.echo');
echos.textContent = searchQuery;
const proxy = 'https://cors-anywhere.herokuapp.com/';
const api =
`${proxy}https://api.darksky.net/forecast/aki_key/${lat1}`;
fetch(api)
.then(response => {
return response.json();
})
.then(data => {
console.log(data);
const {temperature} = data.currently;
temperatureDegree.textContent = temperature;
locationTimezone.textContent = data.timezone;
})
}
})
console.log(geocodeURL);