node.js로 인터넷 데이터를 가져와서 저장하는 프로그램을 만들고 있습니다.
1초에 한 번씩, 데이터는 api로 받아오고 저장은 csv로 합니다.
현재 데이터를 받아오게 되면 아래와 같이 데이터가 순서대로 들어오지 않고 뒤섞이는 문제가 발생하고 있습니다.
02:03:01
02:03:02
02:03:04
02:03:03
02:03:05
02:03:06
02:03:07
02:03:08
02:03:10
02:03:09
제가 setInterval()을 사용하는데 setInterval에서 안에 들어가는 함수가 끝난 후에 함수를 다시 불러오는 방법 혹은 저런 문제가 생기지 않게 만드는 코딩 방식, 아이디어를 알고 싶습니다.
제가 짠 코드는 아래와 같습니다.
const fs = require('fs');
const request = require('request');
var schedule = require('node-schedule');
var isOn = false;
// 데이터를 가져오는 함수.
var getBTCData = function(){
if(isOn == false){
isOn = true;
// 데이터를 불러온다.
console.time('requestTime:')
request({
url: "https://api.gopax.co.kr/trading-pairs/BTC-KRW/book?level=1",
method: 'GET',
json :true
}, (error, response, body) => {
console.timeEnd('requestTime:');
// var Data = JSON.parse(body); // 넣을 데이터 파싱
// 규칙에 따라 데이터를 파싱하고 data 객체에 넣는다.
console.time('parsingTime:');
let date = new Date().toLocaleString();
let today = date.substring(0,4) + "0" + date.substring(5,6) + date.substring(7,9); // 원하는 형태로 파싱
let time = new Date().toLocaleString().substring(10,19);
let bid = body.bid[0][1];
let bidVolume = body.bid[0][2];
let ask = body.ask[0][1];
let askVolume = body.ask[0][2];
console.timeEnd('parsingTime:');
console.time('insertTime:');
let data = `${time},BTC,${bid},${bidVolume},${ask},${askVolume}\n`;
fs.appendFileSync(`./gopax_BTC_${today}.csv`,data);
console.timeEnd('insertTime:');
isOn =false;
});
}
} // end of getBTCData();
setInterval(getBTCData, 1000);
// var rule = new schedule.RecurrenceRule();
// rule.second = new schedule.Range(0, 59, 1);
// schedule.scheduleJob(rule, function(){
// getBTCData()
// });