Не может сделать асинхронную функцию - PullRequest
0 голосов
/ 11 марта 2019

У меня две проблемы:

Первая проблема: я не могу выполнить асинхронную функцию:

let address = req.body.merchant_address;
let location = getGeolocation(address);
console.log(location);

async function getGeolocation(address) {
    try {
        const res = await googleMapsClient.geocode({ address: address }).asPromise();
        const location = res.json.results[0].geometry.location;
        console.log(location)
        return location;
    } catch (e) {
        return res.status(422).json({
            err: err
        });
    }
}

Сначала печатается Promise { <pending> }, а затем только мои координаты, что я сделал не так?в приведенном выше коде?

import maps from '@google/maps';

const googleMapsClient = maps.createClient({
    key: 'my key'
});

Вторая проблема.Когда я строю проект, после запуска выдается ошибка Error: Can not find the module '@ google / maps.Я компилирую проект, используя babel src --out-dir backend в package.json file.Почему он не видит "@ google/maps"?

1 Ответ

3 голосов
/ 11 марта 2019

Относительно первой проблемы: первая undefined печатается последней строкой в ​​вашем фрагменте кода, потому что она выполняется до разрешения обратного вызова geocode (асинхронно).

Существует функция asPromise(), которую вы можете использовать, чтобы избавиться от обратных вызовов и синхронизировать ваш код с async/await, как вы уже начали:

try {
    const res = await googleMapsClient.geocode({
        address: '1600 Amphitheatre Parkway, Mountain View, CA'
    }).asPromise();

    const location = res.json.results[0].geometry.location;

    // your next stuff with location here...

} catch (e) {
    console.error(e);
}

Конечно, весь фрагментдолжен вызываться из async функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...