Не получается записать в переменную страну

Я хочу записать в переменную страну пользователя, а потом ее использовать вне функции. Я пробовал использовать async и await, но не получается.

var country;
$.get("https://ipinfo.io", function(response) {
    console.log(response.country); // RU
    country = response.country;
}, "jsonp");
console.log(country); // undefined

Как я понял, оно делает запрос и сразу идет к console.log, а при ответе запроса присваивает значение. Как мне сделать, чтобы оно выполнялось последовательно?


Ответы (1 шт):

Автор решения: Pavel Grishaev

В таком синхронном виде как вы пишете, сделать это не получится.

Вот пример на async/await:

async function makeRequest(){
  let country = await new Promise( resolve => {
    $.get("https://ipinfo.io", response => {
        resolve( response.country );
    }, "jsonp");
  });
  
  console.log(country);
}

makeRequest();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Или так:

(async ()=>{
  
  let country = await new Promise( resolve => {
    $.get("https://ipinfo.io", response => {
        resolve( response.country );
    }, "jsonp");
  });
  
  console.log(country);
  
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

→ Ссылка