2017-12-18 238 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

您可以使用立即調用的函數表達式(也稱爲IIFE)是這樣的:

(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.

對不起亂身邊的每一個人。我本可以更好地描述我的問題。

再次感謝,