Позвольте мне немного объяснить модель выполнения, поскольку иногда проще, если вы знаете, что происходит "за кадром".
Все выполнение кода инициируется браузером.Это происходит при определенных событиях, например, когда страница загружается, когда пользователь что-то щелкает или когда приходит ответ AJAX.
Итак, что вы делаете, когда пишете приложение GWT (или другое JavaScript), вызарегистрировать обработчики, например, используя onModuleLoad()
, или зарегистрировав ClickHandler для кнопки, или AsyncCallback для вызова GWT-RPC.
Интересная (и, возможно, нелогичная?) вещь заключается в том, что когдабраузер вызывает такой обработчик, он выполняется , пока не завершится (или пока не произойдет ошибка).Только после этого будут выполняться другие обработчики. Кстати, это также означает, что если код для одного обработчика содержит бесконечный цикл, другие обратные вызовы никогда не будут выполнены - вся вкладка браузера будет блокироваться.
Так что, когда ваш hello()
метод выполняется, это делается как часть некоторого обработчика (например, onModuleLoad или ClickHandler).
- устанавливает
a = 1
, - , затем отправляет запрос AJAX (
randomClass.randomMethod
), - регистрирует другой обработчик
AsyncCallback
(помните, это просторегистрация. Браузер сначала завершит текущий обработчик, прежде чем он сможет фактически выполнить этот обработчик AsyncCallback. - выполняет B
- выполняет A
- продолжает выполнение доиерархия вызовов, пока не закончится обработчик.