我有两个数组(gOriginsArray,gDestinationsArray),它们是数组数组,我在每个数组中存储10个地址,我在一组10个条目中存储了将近300个原始地址和300个目的地址。我的gOriginsArray有300个相同的元素。 我正在运行一个循环,并从两个数组发送10个地址以计算距离,但是在从DistanceMatrixService获得结果以及也收到OVER_QUERY_LIMIT错误之前,循环一直进行。
我想找到所有300个地址的距离,然后运行LoadBookingsArray(Records)函数。
for (var k = 0; k < gDestinationsArray.length; k++) {
var DistanceService = new google.maps.DistanceMatrixService();
DistanceService.getDistanceMatrix({
origins: gOriginsArray[k],
destinations: gDestinationsArray[k],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
var results = response.rows[0].elements;
for (var l = 0; l < results.length; l++) {
gDistanceArray.push(results[l].distance.text);
}
} else if (status === google.maps.DirectionsStatus.OVER_QUERY_LIMIT) {
setTimeout(function() {
console.log('OVER_QUERY_LIMIT');
}, 10000);
} else {
console.log(status);
gDistanceArray.push('');
}
});
}
LoadBookingsArray(Records);
我的更新版本带有async / await
async function RunBookings() {
for (var k = 0; k < gDestinationsArray.length; k++) {
let promise = new Promise(function(resolve, reject) {
var DistanceService = new google.maps.DistanceMatrixService();
DistanceService.getDistanceMatrix({
origins: gOriginsArray[k],
destinations: gDestinationsArray[k],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
console.log(response);
var results = response.rows[0].elements;
for (var l = 0; l < results.length; l++) {
gDistanceArray.push(results[l].distance.text);
}
resolve('Good promise');
} else if (status === google.maps.DirectionsStatus.OVER_QUERY_LIMIT) {
console.log('OVER_QUERY_LIMIT');
console.log(response);
console.log(status);
reject(Error("Bad promise"));
} else {
console.log('BAD');
console.log(response);
console.log(status);
reject(new Error("Bad promise"));
}
});
});
let result = await promise;
}
}
答案 0 :(得分:2)
我发现了问题。
在发送下一个请求之前,我必须等待10秒。
Google Maps Distance Matrix API具有以下限制(标准API的用户):每天2500个免费元素。每个查询100个元素。每10秒100个元素。2016年1月18日
答案 1 :(得分:0)
看起来您正在遍历异步操作-DistanceService.getDistanceMatrix。 通过将gDestinationsArray循环包装在async函数中,并等待DistanceService.getDistanceMatrix完成,然后再移至下一个迭代,验证它是否返回Promise并重构代码以处理带有异步/等待的Promises。