2017-12-18 28 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.

周りの混乱の皆様に申し訳ありません。私は私の問題のより良い記述をタイプアップすることができた。

ありがとう、

関連する問題