不能使异步功能

时间:2019-03-11 07:20:23

标签: javascript node.js google-maps

我有两个问题:

我不能做异步功能的第一个问题:

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 个答案:

答案 0 :(得分:3)

关于第一个问题:第一个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函数中调用整个代码段。