Ответ 1
JavaScript (в браузере) является однопоточным. Модель цикла событий означает, что мы всегда находимся в одном из двух состояний:
- в цикле событий
- выполнение обработчика событий
Существует много видов событий: события Click, события onload, события XHR, события таймера,... вам придется объявлять некоторые обработчики (по крайней мере, один во время загрузки страницы), иначе ни один из ваших кодов никогда не будет казнены. Один из них - это обработчик, который вы указываете, реализуя onModuleLoad
.
Важно, чтобы все обработчики были короткими, потому что там нет parallelism и никаких прерываний (за исключением последнего "прерывания script" прерывания). Это означает, что пользователи не могут взаимодействовать с интерфейсом, пока браузер не вернется в цикл событий - и это не произойдет до завершения текущего обработчика.
Итак, если вы хотите отложить некоторый код до тех пор, пока у других обработчиков событий не появится шанс, вы можете использовать Scheduler.scheduleDeferred
.
Scheduler.scheduleIncremental
поможет вам разбить действительно длинные запущенные задачи на несколько этапов, давая другим обработчикам событий шанс каждого из шагов.
Scheduler.scheduleFinally
просто означает: после обработки нашего текущего обработчика (даже если возникает исключение), но перед возвратом в цикл событий выполните мою команду.