我有一个单击事件处理程序,如果一个函数可用,该事件可使该函数出队。我做了一个循环来等待队列。我以为这可以用,但是在我的一台机器上,这会导致繁忙的等待并冻结所有内容。我对为什么这是一个问题感到困惑。目标是等待队列为非空。有人可以帮忙吗?谢谢

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

最佳答案

让我用英语输入您的代码,看看是否有帮助。


handleViewClick函数,需要一个event ...

event分配给clickEvent变量
获取文档正文并将其放入body
如果队列foo的长度不为零...

设置计时器以在一秒钟内再次调用handleViewClick

如果队列foo的长度不为零...

设置计时器以在一秒钟内再次调用handleViewClick

如果队列foo的长度不为零...

设置计时器以在一秒钟内再次调用handleViewClick

如果队列foo的长度不为零...

设置计时器以在一秒钟内再次调用handleViewClick

...
崩溃



while循环将运行直到完成。 setTimeout将在有机会时运行,请在指定时间后尽快运行。两者不兼容。您正在设置数百万个计时器,并且期望结果会有所不同。

您是说if而不是while吗?因为那可以,所以如果您将dequeue调用放在相应的else中。

09-17 00:14