2014-09-03 2 views
0

저는 JavaScript가 처음이므로 아직 익숙해 져 있습니다. 나는 다음과 같은 코드로 수행 지속적으로 데이터베이스 쿼리에서 데이터를 복용하여 업데이트되는 실시간 그래프를 나타내는 기능이 있습니다자바 스크립트에서 지연 시간이있는 실시간 그래프 플롯 실행 중지

watch = setTimeout(function() { 
    updateGraph(parameters, ...); 
    },updateTimeInterval); 

그래프 업데이트를 실행하는 데 시간이 걸립니다 물론 그 또한 달려있다 updateTimeInterval의 값에 예를 들어 updateTimeInterval이 1000ms로 설정된 경우 플롯은 새 값으로 평균 8 초에 업데이트되고 5000ms로 설정된 경우 플롯은 15 초에 업데이트됩니다.

이 업데이트는 플로팅 프로세스를 중지하는 중지 버튼을 누를 때까지 발생합니다.

function stopPlotting() { 
    clearTimeout(watch); 
    } 

이 정지 버튼이 내부의 setTimeout 함수의 실행이 시작되기 전에, 즉, 정확한 순간에 가압 된 경우에만 올바르게 작동한다. 필자의 의견으로는이 함수의 실행이 지연되어 상황이 더욱 복잡해지고 있습니다. 당연히 "올바른"순간을 기다리지 않고 플로팅이 중지 버튼을 누르면 자동으로 멈추기를 원합니다. JavaScript로 구현할 수있는 방법이 있습니까? 이 문제에 대한 해결책을 찾지 못했습니다. 감사!

EDIT :

updateGraph() 데이터가 데이터베이스로부터 검색하는 함수이다. 데이터가있는 즉시 함수는 그래프를 최신 정보로 다시 그립니다 (업데이트). 이 문제는 setTimeout으로 지정된 시간 지연에 따라 지속적으로 발생합니다. 그래프는 누군가가 그 정지 버튼을 누를 때까지 영원히 갱신 될 것입니다.

편집 2 :

나는 거짓 반환 updateGraph() 함수의 여러 장소에서 플래그를 설정 한 경우 플래그 값이 변경. 플래그의 값은 clearTimeout() 전에 stopPlotting() 함수에서 변경됩니다. 이것은 실제로 트릭을 만들었고, 그래프의 플로팅이 중단되었습니다.

그러나 새로운 문제가 나타났습니다. 처음부터 그래프를 다시 플롯하려는 경우 이것이 가능하지 않습니다. 이는 플래그의 값이 이미 변경 되었기 때문에 updateGraph() 함수에서 항상 false를 반환하므로 아무 것도 플롯되지 않습니다. 이것에 대한 힌트가 있습니까?

EDIT3 :

힌트가 stopPlotting() 함수에 다른 부울 변수를 변경하고, updateGraph()에서 값이 변경된 경우 (그러한 경우, 플래그의 값을 교대로) 확인할. 이렇게하면 원하는만큼 여러 번 처음부터 그래프를 그릴 수 있습니다. 오후 8시 30 분 P.S. 부울 변수와 플래그는 모두 전역 변수로 선언됩니다.

+0

'updateGraph()'는 어떻게됩니까? 'stopPlotting()'에 플래그를 설정하고'updateGraph()'내의 여러 지점에서 체크하고 필요하면 구제 할 수 있습니다. –

+0

1000ms는 1 초이어야합니다. 그게 뭐야? – PHPglue

+0

데이터베이스로부터 반복적으로 정보를 얻기 위해서는'setInterval'이 있어야합니다. 설명 해주십시오. – PHPglue

답변

0

타임 아웃 기능이 실행되면 보트가 항해합니다. 타임 아웃 기능은 발사 기능을 제어하지 않고 작동합니다.

기능을 중지하려면 스크립트에서 시간이 중요한 부분 (예 : 아약스 호출)에서 선택되는 변수를 사용할 수 있습니다.

var running = true; 
function dummy(){ 
    if(! running) return false; 
    runThis(); 
    if(! running) return false; 
    runThat(); 
    //finish when there's no interference (running is set to false) 
} 
+0

당신은 setTimeout() 및 clearTimeout()없이 제안하고있는 솔루션입니까? 문제는 누군가가 정지 버튼을 누를 때까지 그래프를 플로팅하는 것이 무한히 계속되어야한다는 것입니다. 내 updateGraph() 함수에 포함시키는 방법을 모르겠습니다. – BenjieB

+0

플로팅을 무한히 실행해야하므로 시간 초과 기능은 계속 유지됩니다. 문제는 일단 플로팅 기능이 실행 중이면 타임 아웃을 지워도 플로팅 기능이 중지되지 않는다는 것입니다. 타임 아웃을 축구 선수라고 생각하십시오. 공을 걷어차 지 말라고 말할 수 있습니다. 하지만 일단 쫓아 내면 공을 멈추게 할 수있는 방법이 없습니다. 볼에 무언가가 있으면 멈추게하지 않는 한. – aldux

관련 문제