【发布时间】:2017-11-23 18:33:58
【问题描述】:
我有 1000 条记录需要访问速率受限的 API 端点。我想让它在任何给定时间都只有 5 个 URL 调用,这样我就不会同时发出 1000 个请求。我怎样才能做到这一点?我有以下内容:
var Promise = require("bluebird");
var geocoder = Promise.promisifyAll(require('geocoder'));
var fs = require('fs');
var async = require('async');
var parse = require('csv-parse/lib/sync');
var inputFile = './myaddresses.txt'
var file = fs.readFileSync(inputFile, "utf8");
var records = parse(file, {columns: true});
var promises = [];
for(var i = 0; i < records.length; i++) {
var placeName = records[i]['Place Name'];
promises.push(geocoder.geocodeAsync(placeName));
}
Promises.all(promises).then(function(result) {
result.forEach(function(geocodeResponse) {
console.log(geocodeResponse);
})
}
【问题讨论】:
-
您必须保持的实际速率限制是多少?它是一些请求数/秒吗?还是别的什么?
-
我不确定,这是 Google 地理编码 API。
-
如果你想保持在速率限制之下,你应该做一些谷歌研究,看看速率限制是什么以及它是如何衡量的。如果没有这些信息,您只是在猜测和测试解决方案,它永远不会非常优化并且可能不一致。
-
在我看来 here 好像是 50 个请求/秒,std 帐户每天 2500 个请求。您可以购买更多访问权限。
标签: javascript promise bluebird