Javascript 价格受谷歌地图限制,但不超过限制
我使用承诺将我的请求限制为客户端映射方向API。谷歌的文档说我可以每秒执行10个请求,但我不能这样做,我也不知道为什么 我每3分钟在大约20秒的时间内打18个电话,每次第一轮都会受到费率限制 很明显,20秒内打18个电话比每秒10个要少得多。我读错信息了吗?还是误解了这一切是如何运作的?谢谢你的帮助,我在这方面做得太久了 下面是我为模拟我正在做的事情而制作的小提琴: 我将它设置为每分钟运行一次,而不是每3分钟18次。如果打开控制台,您可以看到每次调用的状态以及调用的秒数和毫秒数。您还将注意到,第一轮呼叫的评级总是有限的,而随后的每一轮呼叫都是成功的,尽管每个“轮”之间没有差异 我希望这是有意义的!如果你有任何问题,我很乐意澄清。如果您不想/不能访问JFIDLE,我将在下面提供相关代码Javascript 价格受谷歌地图限制,但不超过限制,javascript,google-maps,asynchronous,Javascript,Google Maps,Asynchronous,我使用承诺将我的请求限制为客户端映射方向API。谷歌的文档说我可以每秒执行10个请求,但我不能这样做,我也不知道为什么 我每3分钟在大约20秒的时间内打18个电话,每次第一轮都会受到费率限制 很明显,20秒内打18个电话比每秒10个要少得多。我读错信息了吗?还是误解了这一切是如何运作的?谢谢你的帮助,我在这方面做得太久了 下面是我为模拟我正在做的事情而制作的小提琴: 我将它设置为每分钟运行一次,而不是每3分钟18次。如果打开控制台,您可以看到每次调用的状态以及调用的秒数和毫秒数。您还将注意到,
const getDistance = async (people, place) => {
await sleep(500);
return new Promise((resolve, reject) => {
let origins = [];
for(let person of people){
origins.push(new google.maps.LatLng(person.lat, person.lng));
}
const destin = new google.maps.LatLng(place.lat, place.lng);
const service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
{
origins: origins,
destinations: [destin],
travelMode: 'DRIVING'
}, (res, status) => {
if(status === "OK"){
console.log(
status, `${new Date().getSeconds()}:${new Date().getMilliseconds()}`
);
let result = {id: place.id, distances: []}
res.rows.forEach((row, i) => {
result.distances.push(
{id: people[i].id, distance: row.elements[0].status}
);
});
resolve(result);
} else {
reject(status);
}
}
);
});
}
其名称为:
const findClosest = () => {
return new Promise( async (resolve, reject) => {
let result = [];
for (let place of places){
try {
let distances = await getDistance(people, place);
result.push(distances);
} catch(e) {
reject(e);
}
}
resolve(result);
});
}
如果有人发现了这一点,我已经找到了解决办法 问题是我试图限制网络请求的方式。用这个
const sleep = (ms) => {
return new Promise(resolve => setTimeout(resolve, ms));
}
这是不正确的。通过强制我的代码像这样等待,我看到了两个函数仍可能同时启动的行为
相反,我转而使用lodash,特别是节流功能
通过这样做
const asyncFunc = _.throttle(asyncFunc, 250);
您保证该函数不会每250ms调用一次以上 我相信你达到了极限,因为你的元素太多了。根据,注意:发送到距离矩阵服务的每个查询都受到允许元素数量的限制,其中来源的数量乘以目的地的数量定义了元素的数量。fiddle为我工作(我没有看到任何失败)。您是否阅读了“使用限制和策略”下的“注意事项”在哪里?@geocodezip这太奇怪了。。。第一次对我来说每次都失败了。我每秒不超过100个元素,每秒不超过10个请求,没有其他用户共享我的密钥。我从根本上理解为什么我会收到错误,但对我来说,我似乎没有超过任何配额。如果我每250ms发送12个元素,那么每秒只有48个元素,每秒有4个请求,所以每次都应该可以工作,但事实并非如此