[node.js] api로 데이터를 가져오고 저장하는 문제

조회수 974회

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에서 안에 들어가는 함수가 끝난 후에 함수를 다시 불러오는 방법 혹은 저런 문제가 생기지 않게 만드는 코딩 방식, 아이디어를 알고 싶습니다.

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    소스 확인했습니다. 이런 경우에는 sequence를 기준으로 빼면 되겠네요.

    /* 전략 */
    var isOn = false;
    var lastSeq = 0; // 가장 최근에 체크한 sequence 값을 저장하는 변수
    
    var getBTCData = function(){
        if (isOn == false) {
            isOn = true;
        /* 중략 */
            request({
                url: "https://api.gopax.co.kr/trading-pairs/BTC-KRW/book?level=1",
                method: 'GET',
                json: true
            }, (error, response, body) => {
                console.timeEnd('requestTime:');
                console.time('parsingTime:');
                if (body.sequence > lastSeq) { // 더 최근값인지 체크해서 최신값 맞을 때만
                    let date = new Date().toLocaleString(); // 필요한 로직 수행
                    /* 중략 */
                    console.timeEnd('insertTime:');
                    isOn = false;
                    lastSeq = body.sequence; // 로직이 다 끝나면 이 값도 최신것으로 업데이트
                }
            });
        }
    }
    
    setInterval(getBTCData, 1000);
    
    • 제가 처한 상황이랑은 다른 경우네요. 저는 데이터가 1초에 한 번씩 {"sequence":4438497,"bid":[["4438387",7394000,0.44043107]],"ask":[["4438429",7403000,2.279]]} 이런 형태의 데이터를 가져오는데 이 데이터에 로컬타임을 붙여서 데이터를 저장하고 있습니다. 오해가 있는 것 같으니 위에 제가 만든 코드를 추가하도록 하겠습니다. TaeSun Yoo 2018.8.20 18:42
    • 아 네 소스 확인했습니다. 답변 수정했으니 확인해 보세요~ 엽토군 2018.8.20 21:36
    • 감사합니다! TaeSun Yoo 2018.8.21 07:53

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)