了解GWT中推迟的时间表

时间:2014-02-11 09:30:06

标签: java gwt scheduler

我怀疑GWT中的计划是如何解决的。

我的程序中有以下功能:

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只关注用户输入,如鼠标点击等。它是否也以这种方式影响功能行为?

1 个答案:

答案 0 :(得分:3)

JavaScript(至少在浏览器中)使用事件队列和主线程轮询该队列。当您致电Scheduler.scheduleDeferred时,会在JavaScript中调用setTimeout,延迟时间为1毫秒。这将在延迟过期后在浏览器中对“计时器触发”事件进行排队,并将SchedulerCommand作为参数传递(实际上,Scheduler中涉及另一个队列,但这不会改变整体行动)。

所以,你的代码在这里说的是:延迟“在task1”中1毫秒,然后打印“在task2”,然后在1毫秒之后(并且在可能处理队列中存在的其他事件之后),打印“在task1中”

有关setTimeout在浏览器中如何运作的详细信息,请参阅http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout