Javascript 如何";“处理队列中的挂起事件”;在GWT?

Javascript 如何";“处理队列中的挂起事件”;在GWT?,javascript,gwt,Javascript,Gwt,我正试图自己解决这个问题,因为到目前为止还没有答案。目标是创建一个计时器“任务”,并同步等待它完成。我已经从繁忙的等待转变为阻塞的等待,在一个“慢”(可控延迟)URL上使用XHR请求。但是,虽然我不再浪费CPU,但挂起的事件仍然没有得到处理 我认为我真正需要的是,执行一个循环,告诉GWT/JavaScript处理事件队列中的所有“挂起事件”,直到我的计时器事件被执行为止。在Firefox中,似乎有一种方法可以做到这一点: // Since FF3, we'll have to ask for u

我正试图自己解决这个问题,因为到目前为止还没有答案。目标是创建一个计时器“任务”,并同步等待它完成。我已经从繁忙的等待转变为阻塞的等待,在一个“慢”(可控延迟)URL上使用XHR请求。但是,虽然我不再浪费CPU,但挂起的事件仍然没有得到处理

我认为我真正需要的是,执行一个循环,告诉GWT/JavaScript处理事件队列中的所有“挂起事件”,直到我的计时器事件被执行为止。在Firefox中,似乎有一种方法可以做到这一点:

// Since FF3, we'll have to ask for user permission to execute XPCOM objects.
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
// Get the current thread.
var thread = Components.classes["@mozilla.org/thread-manager;1"]
.getService(Components.interfaces.nsIThreadManager).currentThread;
// Create an inner property to be used later as a notifier.
this.delayed = true;
// Execute "this.delayed = false" after it finishes.
setTimeout("this.delayed = false;", millis);
// Keep looping until "this.delayed = false"
while (this.delayed) {
    // This code will not freeze your browser
    thread.processNextEvent(true);
}
但这在GWTTestCase(htmlunit)中不起作用;所以,我的问题是:

GWT中是否有类似于thread.processNextEvent()的东西?

在回答以下问题之前,请考虑这一点:

  • 我正在创建一个单元测试
  • 这永远不会在客户端浏览器或服务器中执行
  • 因此,“最佳实践是使用异步代码”的建议与此无关
  • 即使“使用异步代码”是相关的,它也对我毫无帮助,因为JUnit风格的测试不支持异步代码测试(至少在单线程环境中不支持!)

  • GWT JUnits肯定支持异步代码,因为很多测试用例都依赖它。
    GWTTestCase
    类有两个方法,您会发现它们很有用:
    delayTestFinish(int)
    finishTest()
    @ColinAlworth谢谢。这解决了我最初的问题。