リクエストごとに数百のアイテムをジオコーディングする必要があるアプリを実行しています。非常に素朴なことに、GoogleマップのジオコーディングAPIを呼び出すforループを実行しました。何が起こるかというと、私のコードは非常に短い時間でAPIに対してあまりにも多くの呼び出しを行うため、5〜10回の反復の後、ジオコーディングAPIはOVER_QUERY_LIMIT
制限付きで応答します。Google APIリファレンスを参照すると、これは次の理由で発生します。
Webページが短期間でリクエスト制限を超えました。
私のループは現在次のようなものです:
for (var i = 0; i < dict.nodes.length; i++) {
(function (i) {
g.geocode({'address': dict.nodes[i].location}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
dict.nodes[i]["geocoded_location"] = results
}
})
})(i);
}
APIの制限を回避するために、sleep()関数のようなものを実装して、ジオコーディング関数の呼び出しをランダムに遅らせるにはどうすればよいですか。ばかげたwhileループを実装しましたが、CPUも泣きます。何か案は?