为啥我不能在函数中返回计算出的距离(来自 Google Maps API)? [复制]
Posted
技术标签:
【中文标题】为啥我不能在函数中返回计算出的距离(来自 Google Maps API)? [复制]【英文标题】:Why can't I return the calculated distance (from Google Maps API) in a function? [duplicate]为什么我不能在函数中返回计算出的距离(来自 Google Maps API)? [复制] 【发布时间】:2021-01-11 10:14:45 【问题描述】:我一直在尝试编写一个程序,该程序最终将获取一组距离并将它们输入到一个数组中。通过我附加的代码,我找到了两个位置之间的距离,我可以将该距离放入控制台日志中——我只是无法在该函数中返回它。我已经尝试使用 async/await 和 Promises 来尝试将其从函数中取出,但这会导致数组包含已履行的 Promise,但是数据是“未定义的”(在下面的代码中,我删除了 async await 实现) .请告知我如何返回此距离值并最终将其放入数组中。
function getDistances(directionsService, destination)
var route = origin: document.getElementById("Address").value, // User input for their address
destination: destination,
travelMode: 'DRIVING'
directionsService.route(route, // Request for a route
function(response, status)
if (status !== 'OK')
window.alert('Directions request failed due to status error: ' + status);
return;
else
var directionsData = response.routes[0].legs[0]; // Get data about the mapped route
if (!directionsData)
window.alert('Directions request failed');
return;
else
var currentDist = directionsData.distance.value;
return currentDist; // When this is returned, it's always undefined
函数 getDistances(directionsService, 目的地)
【问题讨论】:
你没有在function getDistances
中返回任何东西——你提到了承诺,但你的代码没有使用承诺......无论哪种方式,你永远无法从@987654323 返回任何直接有用的东西@ 因为来自 directionsService.route
的结果是异步的 - 你可以从 getDistances
返回一个在 directionsService.route
回调中解析的 Promise
【参考方案1】:
如果你想使用 Promise - 然后返回一个 Promise,你可以从 getDistances
返回一个在 directionsService.route
回调中解析的 Promise
类似
function getDistances(directionsService, destination)
return new Promise(function (resolve, reject)
var route =
origin: document.getElementById("Address").value, // User input for their address
destination: destination,
travelMode: 'DRIVING'
directionsService.route(route, function (response, status)
if (status !== 'OK')
reject( response, status, reason: 'Directions request failed due to status error' );
else
var directionsData = response.routes[0].legs[0]; // Get data about the mapped route
if (!directionsData)
reject( response, status, reason: 'Directions request failed' );
else
resolve(directionsData.distance.value);
);
);
但是,这假设 directionsService.route
回调仅被调用一次(您在问题中提到了 Array,所以...不确定您的代码中哪里有 Array)
【讨论】:
这行得通,谢谢!现在我正在尝试访问返回的 Promise 中的值。我该怎么做?我有一系列这些承诺,并希望找到距离最短的元素。当我尝试排序和执行操作时,它不起作用,因为数组中的不是数字。有没有办法只访问 Promise 中的值?谢谢。 @Jackson - 与任何 Promise 一样 ....then
或 await
以上是关于为啥我不能在函数中返回计算出的距离(来自 Google Maps API)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
尝试编写最近邻算法 - 欧几里得距离函数只计算测试集的一行的距离 - 为啥?