javascript / jquery循环导致繁忙等待

时间:2015-01-07 15:25:27

标签: javascript jquery

我有一个click事件处理程序,如果有一个函数可以使函数出列。我做了一个等待队列的循环。我认为这样可行,但在我的一台机器上,它会导致忙碌的等待并冻结一切。我很困惑为什么这是一个问题。目标是等待队列非空。有人可以帮忙吗?感谢

function handleViewClick(event){
  clickEvent = event;  // make event details available to requestReport on body-foo Q
  var body = $("body");
  while ( 0 == body.queue("foo").length ) 
    setTimeout(function(){
        handleViewClick(event);
      },
      1000);
  body.dequeue("foo");  // analyze and report on click.
}

1 个答案:

答案 0 :(得分:4)

让我用英文编写代码,看看是否有帮助。

  • handleViewClick功能,需要event ...
    • event分配给clickEvent变量
    • 获取文档正文并将其放入body
    • 如果队列foo的长度不为零......
      • 设置一个计时器,以便在一秒钟内再次呼叫handleViewClick
    • 如果队列foo的长度不为零......
      • 设置一个计时器,以便在一秒钟内再次呼叫handleViewClick
    • 如果队列foo的长度不为零......
      • 设置一个计时器,以便在一秒钟内再次呼叫handleViewClick
    • 如果队列foo的长度不为零......
      • 设置一个计时器,以便在一秒钟内再次呼叫handleViewClick
    • ...
    • 崩溃。

while循环将一直运行直到完成。 setTimeout会在获得机会后运行,并在指定时间后尽快运行。这两者是不相容的。您正在设置数百万个计时器,并期望结果不同。

您的意思是if而不是while吗?因为这样可行,如果您将dequeue调用放入相应的else