我一直在使用GWT进行一些Web应用程序编程,并且被术语“浏览器事件循环”搞糊涂了。
我遇到过需要执行延迟命令并在浏览器事件循环完成后“执行某些操作”的情况。
我想知道它究竟是什么以及在事件循环过程中发生了什么以及以什么顺序发生?
答案 0 :(得分:18)
浏览器事件循环是由浏览器启动的一个线程,它不断扫描并运行不同的事件,就像听起来一样。当事件发生时,它们被放入事件队列中并由一个事件线程依次运行。你的javascript不应该创建自己的循环等待它完成或类似的东西...它将阻止一个连续的事件循环线程。相反,你会使用类似setTimeout或setInterval的东西,并检查你正在等待的任何条件,这样浏览器就可以在“等待”时工作。
GWT很好,因为它可以使用scheduler稍微选择这个过程 - 在你想要在事件循环“完成”之后运行某些东西的情况下你可能想要使用scheduleFinally或scheduleDeferred 。它会将一段代码的处理程序注入到事件队列中,以便它将在当前执行上下文中的所有其他代码之后运行(当前执行上下文==您在当前JavaScript对象层次结构中的任何位置,其中窗口为根对象)运行但在下一个放入队列的事件之前。