我对 GWT 中的 Schedule defrred 如何工作有疑问。
我的程序中有以下功能:
function()
{
doTask1();
doTask2();
}
doTask1() {
Scheduler.get.scheduleDeferred(new Scheduler.ScheduledCommand) {
System.out.println("In task1");
}
}
doTask2() {
System.out.println("In task2");
}
我期望的是以下输出:
In task1
In task2
但是我得到的输出是:
In task2
In task1
为什么会这样呢?我的理解是 ScheduleDeferred 只处理用户输入,例如鼠标单击等。它是否也会以这种方式影响函数行为?
最佳答案
JavaScript(至少在浏览器中)使用事件队列和轮询该队列的主线程。当您调用 Scheduler.scheduleDeferred
时,会在 JavaScript 中调用 setTimeout
,延迟为 1 毫秒。这将在延迟到期后在浏览器中对“计时器触发”事件进行排队,并使用您作为参数传递的 SchedulerCommand
(实际上,Scheduler
中涉及另一个队列,但是这不会改变整个操作流程)。
因此,您的代码在这里所说的是:将“在任务 1 中”延迟 1 毫秒,然后打印“在任务 2 中”,然后在 1 毫秒后(并且可能在处理队列中存在的其他事件之后),打印“在任务 1 中” ”。
参见http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout了解 setTimeout
在浏览器中如何工作的详细信息。
关于java - 了解 GWT 中推迟的计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21697881/