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

对不起乱身边的每一个人。我本可以更好地描述我的问题。

再次感谢,