現在、Wunderground から気象データを取得し、MongoDB に保存しています。データを収集する場所が 30 ありますが、1 分あたり 10 クエリしか実行できないため、配列内の各郵便番号を 10 秒ごとにクエリする「タイマー」を設定しようとしています。
現在、私のコードはデータを正常に収集して Mongo に書き込むことができるので、問題はありません。問題は、各 API 呼び出し間の遅延の設定にあります。私は javascript にかなり慣れていないため、非同期処理にも慣れていないため、問題が発生しています。setInterval() を使用してみましたが、あまり成功しませんでした。
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err,db) {
var zip = ["zip1","zip2","zip3","zip4","zip5","zip6","zip7"] ;
for(var i = 0; i<zip.length; i++) {
// Define the Wunderground method.
var method = "/api/" + apiKey + "/conditions/q/" + zip[i] + ".json";
// Define the HTTP post properties.
var options = {
host: 'api.wunderground.com',
path: method,
method: 'GET',
port: 80
};
// Create the HTTP POST.
var request = http.request(options, function (response) {
var str = '';
// Create the listener for data being returned.
response.on('data', function (chunk) {
str += chunk;
});
// Create the listener for the end of the POST.
// Send data to MongoDB
response.on('end', function (){
var myObject = JSON.parse(str);
var location = myObject.current_observation.display_location.full
db.collection('weathercollection').save(myObject, function(err, records) {
console.log(location);
});
db.close;
}); // close response.on
}); // close var request
request.end(); // Close the HTTP connection.
}; //close for loop
});