了解 GWT 中延迟的计划

som*_*esh 1 java gwt scheduler

我对 GWT 中的 Schedule defrred 如何工作有疑问。

我的程序中有以下功能:

function()
{
 doTask1();
 doTask2();
}

doTask1() {
 Scheduler.get.scheduleDeferred(new Scheduler.ScheduledCommand) {
  System.out.println("In task1");
 }
}

doTask2() {
 System.out.println("In task2");
}
Run Code Online (Sandbox Code Playgroud)

我期望的是以下将是输出:

In task1
In task2
Run Code Online (Sandbox Code Playgroud)

但我得到的输出是:

In task2
In task1
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我的理解是 ScheduleDeferred 只处理用户输入,如鼠标点击等。它是否也会以这种方式影响功能行为?

Tho*_*yer 5

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

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

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