2016-06-22 3 views
-1

api에서 얻은 값으로 스택 영역 그래프를 만들려고합니다. 첫 번째 API는 내게 일정 범위를 제공합니다. 예 : 6 월 1 일 - 6 월 7 일. 두 번째 API를 통해 그래프에 필요한 값을 얻을 수 있습니다. 데이터는 다음과 같습니다.간격을 지운 후에 api를 다시 호출하는 방법

제 아이디어는 API를 호출하고 카운트 값을 매 함수마다 함수에 푸시하는 것입니다. 하지만 어쨌든 나는 100ms마다 api를 호출하고 모든 데이터를 가져 와서 그래프를 트리거하기 때문에 그렇게 할 수는 없습니다. 이제 한 번의 반복이 완료된 후 두 번째 API를 호출하려고 할 때 호출이 그래프를 인터럽트합니다. 이 문제를 해결하도록 도와주세요.

d3.json('/service/dates', function(error, dates) { 
    var dran = dates; 
    if (dates != null) { 
     sDt = new Date(dates.st); 
     eDt = new Date(dates.et); 
     var i = 0; 
     var start = function() { 
     if (sDt > eDt) { 
      clearInterval(interval); 
      $('.wrapper').trigger('newPoint'); 
      return; 
     } 
     var sDate = sDt.toISOString(); 
     var eDate = new Date(sDt.setMinutes(sDt.getMinutes() + 30)).toISOString(); 

     //Calling the api for graph values 
     d3.json("/service/dat?s=" + sDate + "&e=" + eDate, function(error, results) { 
      if (results != null) { 

      numbers = numbers.push(results.numbers); 
      values = values.push(results.values); 
      } 
     }); 
     i++; 
     } 
     var interval = setInterval(start, 100); 
    } 
    }); 
} 
+0

'setInterval'을 호출하는 경우 두 번 지워야합니다. – 11thdimension

+0

당신이 두 번 호출하고 있다는 것을 의미합니다.'func'의 두 번째 호출은 결코 지워지지 않습니다. – 11thdimension

+0

@ 하 라비 왜 코드를 편집 했습니까? 그것은 질문을 전혀 쓸모 없게 만들고 수용된 대답을 아무런 의미없이 매달아 놓습니다. – altocumulus

답변

1

명명 된 함수 내에 전체 API 호출을 넣습니다. 그런 다음 start() 함수에서 호출하여 모든 것을 다시 시작하십시오.

function doAPILoop() { 
    d3.json('/service/dates', function(error, dates) { 
    var dran = dates; 
    if (dates != null) { 
     sDt = new Date(dates.st); 
     eDt = new Date(dates.et); 
     var i = 0; 
     var start = function() { 
     if (sDt > eDt) { 
      clearInterval(interval); 
      $('.wrapper').trigger('newPoint'); 
      doAPILoop(); 
      return; 
     } 
     var sDate = sDt.toISOString(); 
     var eDate = new Date(sDt.setMinutes(sDt.getMinutes() + 30)).toISOString(); 

     //Calling the api for graph values 
     d3.json("/service/dat?s=" + sDate + "&e=" + eDate, function(error, results) { 
      if (results != null) { 

      numbers = numbers.concat(results.numbers); 
      values[values.length] = results.values; 
      } 
     }); 
     i++; 
     } 
     var interval = setInterval(start, 10); 
    } 
    }); 
} 

doAPILoop(); 
+0

무슨 그래프에 대해 이야기하고 있습니까? – Barmar

+0

다시 시작한 후'num1'과'num2'는 어떻게됩니까? 왜냐하면 30 분 후에 다시 검사 할 것이기 때문에'num1> num2'는 코드를 실행하고 다시 시작하고'/ do something' 코드에 들어 가지 않습니다. – Barmar

+0

'num1 <= num2'이면'something do' 코드를 실행해야합니다. 왜 작동하지 않는지 모르겠다. – Barmar

관련 문제