我有两个问题:
我不能做异步功能的第一个问题:
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"
?
答案 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
函数中调用整个代码段。