JavaScript (в браузере) является однопоточным. Модель цикла событий означает, что мы всегда находимся в одном из двух состояний:
- в цикле событий
- выполнение обработчика события
Существует много видов событий: события щелчка, события загрузки, события XHR, события таймера, ... Вам нужно будет объявить некоторые обработчики (по крайней мере, один во время загрузки страницы), иначе ни один ваш код никогда не будет казнены. Одним из них является обработчик, который вы указываете путем реализации onModuleLoad
.
Важно, чтобы все обработчики были короткими, потому что нет параллелизма и прерываний (кроме последнего прерывания «неотзывчивый сценарий»). Это означает, что пользователи не могут взаимодействовать с интерфейсом, пока браузер не вернется к циклу событий - и этого не произойдет до завершения текущего обработчика.
Так что, если вы хотите отложить некоторый код до тех пор, пока у других обработчиков событий не появится шанс, вы можете использовать Scheduler.scheduleDeferred
.
Scheduler.scheduleIncremental
помогает разделить действительно долго выполняющиеся задачи на несколько этапов, предоставляя другим обработчикам событий шанс между каждым из этапов.
Scheduler.scheduleFinally
просто означает: после обработки нашего текущего обработчика (даже если возникает исключение), но перед возвратом в цикл обработки событий выполните мою команду.
См. com.google.gwt.core.client.impl.Impl.entry0 ()