0

Есть функция:

async function getLat() {
        let lat = await geocoder.geocode(cityName, (err, data) => {
            lat = data.results[0].geometry.location.lat;
            return lat;
        }, { key: GOOGLE_API });
    }

console.log(getLat());

Почему результат её работы Promise {<pending>}?

IRonny
  • 306
  • 2
  • 13
  • 1
    потому что стоит async – Grundy Apr 12 '21 at 18:57
  • Т.е я никак не смогу получить нужный мне результат таким способом? – IRonny Apr 12 '21 at 18:59
  • нужный результат это какой? ты можешь написать console.log(await getLat()); – Grundy Apr 12 '21 at 19:01
  • Можно предположить ещё, что await geocoder.geocode — это ошибка, так как geocoder.geocode использует колбек, чтобы работать с результатом, а не возвращает промис. Если data доступно только внутри колбека, эти данные нельзя будет вернуть из geocoder.geocode без дополнительных ухищрений. – vsemozhebuty Apr 12 '21 at 19:05
  • Я ожидаю, что ф-я вернёт координаты в формате 7.12389819. Попробовал console.log(await getLat()); - получил undefined.

    Можно поподробнее о дополнительных ухищрениях?

    – IRonny Apr 12 '21 at 19:06
  • Чтобы понять, что происходит, нужно знать, как работает geocoder.geocode. Это ваша функция или библиотечная? К ней есть документация? – vsemozhebuty Apr 12 '21 at 19:08
  • Скорее всего вам нужно вот это, если хотите работать в стиле промисов с функциями, использующими колбеки: https://learn.javascript.ru/promisify – vsemozhebuty Apr 12 '21 at 19:12
  • С помощью npm установил пакет "geocoder": "0.2.3". Вообще, ф-я работает нормально если я не пытаюсь получать значения асинхронно. У меня есть глобальная ф-я которая срабатывает при нажатии на кнопку, после этого я хотел с помощью ф-и 'getLat()получать значениеlat` и это значение использовать в других функциях но так как переменная объявлена локально то в других функциях я не мог использовать её и пришел к решению в котором сам создам функцию и уже результат её работы буду использовать в других функциях: Так же мой вопрос о этой теме: https://ru.stackoverflow.com/q/1269373/389030 – IRonny Apr 12 '21 at 19:17
  • Думаю, чтобы не тыкать наугад в темноте, вам стоит разобраться с базовыми вещами в асинхронности. Проштудируйте https://learn.javascript.ru/async, если ещё не. – vsemozhebuty Apr 12 '21 at 19:39

0 Answers0