Javascript 如何";“处理队列中的挂起事件”;在GWT?
我正试图自己解决这个问题,因为到目前为止还没有答案。目标是创建一个计时器“任务”,并同步等待它完成。我已经从繁忙的等待转变为阻塞的等待,在一个“慢”(可控延迟)URL上使用XHR请求。但是,虽然我不再浪费CPU,但挂起的事件仍然没有得到处理 我认为我真正需要的是,执行一个循环,告诉GWT/JavaScript处理事件队列中的所有“挂起事件”,直到我的计时器事件被执行为止。在Firefox中,似乎有一种方法可以做到这一点:Javascript 如何";“处理队列中的挂起事件”;在GWT?,javascript,gwt,Javascript,Gwt,我正试图自己解决这个问题,因为到目前为止还没有答案。目标是创建一个计时器“任务”,并同步等待它完成。我已经从繁忙的等待转变为阻塞的等待,在一个“慢”(可控延迟)URL上使用XHR请求。但是,虽然我不再浪费CPU,但挂起的事件仍然没有得到处理 我认为我真正需要的是,执行一个循环,告诉GWT/JavaScript处理事件队列中的所有“挂起事件”,直到我的计时器事件被执行为止。在Firefox中,似乎有一种方法可以做到这一点: // Since FF3, we'll have to ask for u
// 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()的东西?
在回答以下问题之前,请考虑这一点:
GWT JUnits肯定支持异步代码,因为很多测试用例都依赖它。
GWTTestCase
类有两个方法,您会发现它们很有用:delayTestFinish(int)
和finishTest()
@ColinAlworth谢谢。这解决了我最初的问题。