java - 了解 GWT 中推迟的计划

标签 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");
}

我期望的是以下输出:

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/

相关文章:

java - Hadoop 作业 : Task fail to report status for 601 seconds

java - 将值返回到 "opener"的 GWT 对话框

gwt - 简单的 GWT OpenID 示例

java - GWT super 开发模式不适用于 GQuery

Python 理解调度程序

java - 获取大小为 n 但只有 k 个 1 的所有二进制组合

java.lang.ClassCastException : java. lang.String 无法转换为 javax.mail.Multipart

scheduler - 完全公平调度器 vs 循环法

java - NoClassDefFoundError Proguard Activity

windows - Windows 任务计划程序的替代品