Вы можете «заблокировать» основной поток с помощью цикла. Здесь есть несколько серьезных недостатков.
- JavaScript работает в потоке пользовательского интерфейса браузера. Это означает, что пользовательский интерфейс страницы заблокирован до тех пор, пока не завершится исполняемый в данный момент JavaScript, блокируя взаимодействие с пользователем и рендеринг.
- Некоторые браузеры обнаруживают сценарий, выполнение которого занимает много времени, и спрашивают пользователя, хотят ли они прекратить его выполнение.
- Операционная система может спросить пользователя, хочет ли он закрыть браузер, если он не отвечает.
- Без твердого оператора break; , вы можете застрять в бесконечном цикле. Помните, что никакой другой код не будет выполняться (даже обратные вызовы), пока вы не выйдете из цикла. Изменяются только те свойства, которые изменяются асинхронно, например свойство readyState .
Если вы хотите заблокировать поток во время ожидания Ajax-запроса, вы можете отправить запрос синхронно. Однако это будет иметь те же недостатки, что и цикл блокировки.
Как сказал MunkiPhD , вы, вероятно, смотрите на проблему неправильно. Обратные вызовы широко используются в JavaScript, чтобы избежать блокировки потока пользовательского интерфейса, почти гарантируется, что структурирование вашего кода для использования функции обратного вызова в таймере или событии будет работать намного лучше, чем вы думаете в настоящее время.