JS: Асинхронная c функция с оператором ожидания приводит к неопределенному обещанию. Что я делаю не так? Простой пример - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в JS и сейчас погружаюсь в асинхронные функции и обещания. Имея некоторый опыт работы с Python и R, это для меня совершенно ново. Я прочитал много разных веб-сайтов, разделов и решений для возврата значения в асинхронной функции, но не могу заставить его работать. Ниже я свел это к упрощению функции, которую я написал, предназначенной для получения информации от Google о местоположении и ее возврата. Просто как тот. Я последовал совету в Интернете и попытался переписать следующий совет от Бенджамина Грюнбаума на Как мне вернуть ответ от асинхронного вызова? .

async function foo(){
    var data = await fetch("/echo/json"); // notice the await
    // code here only executes _after_ the request is done
    return data.json(); // data is defined
}

Пожалуйста см. мой собственный код ниже. Мне кажется, что я делаю то же самое, но все равно записывается как Promise {<pending>} ... Что я делаю не так? data должен быть массивом. Даже если я заменю только свой URL-адрес googleapi и использую fetch() и .json(), он регистрируется как Promise {<pending>}.

async function foo() {
  var data = await axios.get("https://maps.googleapis.com/maps/api/geocode/json?address=Amsterdam&key=API_KEY");
  return data;
}
      console.log(foo())

Ответы [ 2 ]

1 голос
/ 07 мая 2020

попробуйте Этот способ вызова asyn c function

 async function foo() 
    {
      let response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?address=Amsterdam&key=API_KEY`);
      let data = await response.json()
      return data;
    }

    foo().then(data => console.log(data)); 
0 голосов
/ 07 мая 2020

Можете ли вы попробовать приведенный ниже код, чтобы узнать, что происходит с вашими "данными". Это не решение вашей проблемы, просто вы будете знать, что у вас получилось

console.log(JSON.stringify(foo()));
...