【问题标题】:setTimeout Issue JavascriptsetTimeout 问题 Javascript
【发布时间】:2018-05-31 19:58:26
【问题描述】:

我在尝试递归调用方法时遇到了一个奇怪的错误。

就好像编译器跳过了 setTimeout 函数。

我正在从另一个函数调用该函数以开始递归,但 setTimeout 没有再次调用 startFaceTracking()。

我可能很愚蠢,但有人能指出问题吗?

我试过了,

function startFaceTracking() {

    var eventHit = false;


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

    } 
}

还有这个

function startFaceTracking() {

    var eventHit = false;


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

    } 
}

提前致谢,

【问题讨论】:

  • setTimeout 可能正在运行。你的函数没有做任何其他事情,所以你甚至不知道它是否正在运行。你期待看到什么?
  • var eventHit = false; 所以你的代码会重复调用同一个函数
  • 该函数肯定没有运行。否则我会陷入无限循环。
  • 写一个console.log("SOMETHING");进入你的超时功能并检查是否打印它。可能就像说@Carcigenicate 和 setTimeOut 函数正在工作,但 500 毫秒是很短的时间来欣赏它。
  • @howells699 你可以试试这个......在 startFaceTracking() 函数之外编写 eventHit ,就像一个具有 false 值的全局变量,并将 if 语句复制到 startFaceTracking() 函数中并粘贴到函数下方。因为我假设您在某处调用了该函数,如果没有,可能因此无法正常工作......因为您没有在任何地方调用 startFaceTracking() 函数

标签: javascript jquery recursion


【解决方案1】:

您可以像这样使用立即调用的函数表达式(也称为 IIFE):

(function startFaceTracking() {

  var eventHit = false;


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

  } 
})();

你可以在这里阅读更多:Ben Alman about Immediately-Invoked Function Expression (IIFE)

【讨论】:

  • 太棒了...我不知道
【解决方案2】:

您的超时在函数内部,并且您没有调用该函数,因此从一开始就不会启动超时。调用一次,就会递归。

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

  var eventHit = false;

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

startFaceTracking()

【讨论】:

【解决方案3】:

问题是我在使用 setTimeout 内的 setTimeout。

我的 java 脚本格式错误,还测试了函数。

Here is the link to the answer.

很抱歉给大家添乱了。我本可以更好地描述我的问题。

再次感谢,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多