【发布时间】:2017-12-20 02:42:38
【问题描述】:
我正在尝试使用 async/await,但我认为我严重误解了某些内容。
基本上,我正在尝试使用 google maps api 计算一系列位置与一个指定位置之间的距离。
这是我正在尝试做的一个粗略示例:https://jsfiddle.net/qu5y69rj/1/
您可以看到,该函数的结果是 undefined 3 次,而不是我所期望的,在我设计的示例中,每次调用都会是 {distance: "ZERO_RESULTS"}。
getDistance = async (start, end) => {
const origin = new google.maps.LatLng(start[0], start[1]);
const final = new google.maps.LatLng(end[0], end[1]);
const service = new google.maps.DistanceMatrixService();
let result; //need to return this value!
await service.getDistanceMatrix(
{
origins: [origin],
destinations: [final],
travelMode: 'DRIVING'
}, (response, status) => {
if(status === 'OK') result = {distance: response.rows[0].elements[0].status}
}
)
return result;
}
为什么在 promise 解决之前返回结果?只有在解决该承诺后,我才能返回 result 的值?我的理解是,通过告诉 javascript 等待,我是说在这个承诺得到解决之前不要继续前进。这是不正确的吗?我很困惑,这让我把头发拉了出来。任何帮助表示赞赏。
【问题讨论】:
-
async/await 只是包装承诺。我在这段代码中看不到任何承诺。
service.getDistanceMatrix是您的代码吗?你能让它返回一个承诺而不是回调吗? -
不,它是谷歌地图 api 的一部分,所以它就是这样
-
你不能
await一个回调风格的异步函数。你应该先学习how to use promises,然后再尝试解决async/await。
标签: javascript asynchronous async-await