Проблема с вашим текущим вызовом console.log(country)
перед country
установлена на response.countryCode
.
Вы можете решить эту проблему, поместив свой код в асинхронный c IIFE следующим образом:
(async () => {
const response = await fetch('https://extreme-ip-lookup.com/json/');
const ipData = await response.json();
const country = ipData.countryCode;
// place all code that uses `country` in here
console.log(country);
})();
Если у вас есть другой сценарий с определениями функций, зависящими от county
, обязательно примите его как параметр и не извлекайте данные из глобальной переменной.
// helper_functions.js
// Bad
function someFunctionThatUsesCountry() {
console.log(country); // <- don't expect the global to be set
}
// Good
function someFunctionThatUsesCountry(country) {
console.log(country); // pull country ^ from the parameter list
}
Затем вы можете позвонить вам другой сценарий внутри IIFE, просто передав значение.
(async () => {
// ...
someFunctionThatUsesCountry(country);
})();
Если по какой-то причине очень плохо нужна глобальная переменная. Вы должны поместить в эту переменную обещание, а не значение. С помощью этого обещания вы можете передать значение, а также уведомить другие скрипты, когда это значение станет доступным.
// script_1.js
window.country = fetch('https://extreme-ip-lookup.com/json/')
.then(response => response.json())
.then(ipData => ipData.countryCode);
// script_2.js (must be loaded after script_1.js)
window.country.then(country => { // <- wait until country is available
// do stuff with country
console.log(country);
});