2017-12-18 1 views
-2

재귀 적으로 메소드를 호출하려고 할 때 이상한 버그가 발생합니다.setTimeout 문제 Javascript

마치 컴파일러가 setTimeout 함수를 건너 뛰는 것과 같습니다.

다른 함수에서이 함수를 호출하여 재귀를 시작할 수 있지만 setTimeout은 startFaceTracking()을 다시 호출하지 않습니다.

나는 어리 석지 만 누군가가 문제를 지적 할 수 있습니까?

function startFaceTracking() { 

    var eventHit = false; 


    if(!eventHit){ 
     setTimeout(startFaceTracking,500); 

    } 
} 

나는이 시도했다

, 사전에서이

function startFaceTracking() { 

    var eventHit = false; 


    if(!eventHit){ 
     setTimeout(function(){startFaceTracking();},500); 

    } 
} 

감사합니다,

+3

아마도 setTimeout이 실행 중일 것입니다. 귀하의 기능은 다른 어떤 일도하지 않으므로 실행 중인지 알지 못할 것입니다. 너는 무엇을 기대하고 있니? – Carcigenicate

+0

'var eventHit = false;'그래서 코드가 동일한 함수를 반복적으로 호출합니다. –

+0

함수가 확실히 실행되고 있지 않습니다. 그렇지 않으면 무한 루프에 빠질 것입니다. – howells699

답변

3
당신은이 같은 (또한 인생라고도 함) 즉시 호출 함수 표현식을 사용할 수 있습니다

는 :

(function startFaceTracking() { 

    var eventHit = false; 


    if(!eventHit){ 
    setTimeout(startFaceTracking,500); 

    } 
})(); 

여기에서 자세한 내용을보실 수 있습니다 : Ben Alman about Immediately-Invoked Function Expression (IIFE)

+0

위대한 ... 나는 몰랐다 –

2

귀하의 타임 아웃 기능 내부 하고, 그 함수를 호출하지 않는 , 타임 아웃은 처음부터 시작되지 않습니다. 한 번 부르면 재발 할 것입니다.

function startFaceTracking() { 
 
    console.log("Starting face tracking!") 
 

 
    var eventHit = false; 
 

 
    if (!eventHit) { 
 
    console.log("Starting timeout..."); 
 
    setTimeout(startFaceTracking, 500); 
 
    } 
 
} 
 

 
startFaceTracking()

+0

메소드를 재귀 적으로 만들고 setTimeout 함수를 사용할 수 있습니까? 감사합니다 – howells699

+0

@ howells699 다음 우리는 https://stackoverflow.com/questions/6685396/execute-the-setinterval-function-without-delay-the-first-time의 중복을 가지고 –

0

문제를 나는 setTimeout 내부에서 setTimeout을 사용하고 있었다.

나는 내 Java 스크립트를 잘못 포맷했으며 기능도 테스트했다.

Here is the link to the answer.

주위를 엉망 모두에게 죄송합니다. 나는 내 문제에 대해 더 잘 설명 할 수 있었다.

감사합니다.