gpt4 book ai didi

javascript - 如何使用 async.each 方法发送同一集合的两个值?

转载 作者:行者123 更新时间:2023-12-03 06:25:27 25 4
gpt4 key购买 nike

我正在尝试使用谷歌距离矩阵 API 计算 n 点之间的距离。

这是代码

var sum=0;
for(i=1;i < locations.length;i++){
var origin = locations[i-1];
var destination = locations[i];
var service = new google.maps.DistanceMatrixService;
service.getDistanceMatrix({
origins: [origin],
destinations: [destination],
travelMode: 'DRIVING',
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, function(response, status) {
if (status !== 'OK') {
alert('Error was: ' + status);
} else {
sum += response.rows[0].elements[0].distance.value;
}
});
}

但这不起作用。因为我的循环完成得比谷歌距离矩阵响应快。我知道这是错误的,而且行不通。因此,我决定使用我最喜欢的异步库 async.js。但那我该怎么做呢?

origin = locations[i-1]  
destination = locations[i].

我只是使用 async.each 获取集合中的单个元素,这是我选择的方法。我应该选择什么 async.js 方法来处理此类问题?或者我应该采用一些完全不同的方法来解决这个问题?

感谢帮助
萨拉斯

编辑
对于那些问我为什么要这样做的人?我想像 Uber 自己的应用程序一样准确地计算距离,为此我正在收集大量数据点(实时位置坐标)。但我不知道他们如何准确地计算距离(另一种方法是方向API,但我发现它不是那么好)。我只能猜测他们正在使用距离矩阵 API,并将其应用于一次行程中的 100 多个数据点来计算距离。

最佳答案

同步从数组中选择元素并将其放入另一个数组中:

var legs = [];
for (var i=1; i<locations.length; i++)
legs.push({origin:locations[i-1], destination:locations[i]});

然后,您可以使用您选择的 async.js 方法来迭代该数组,可能是 mapmapSeries,也可能是 reduce如果您只想对距离求和。

async.map(legs, function(leg, cb) {
service.getDistanceMatrix({
origins: [leg.origin],
destinations: [leg.destination],

}, cb);
}, function(err, responses) {

})

关于javascript - 如何使用 async.each 方法发送同一集合的两个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38677636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com