Непоследовательное выполнения кода.
Добрый день, всем.
Столкнулся с тем, что код выполняется не в той последовательности, в которой мне нужно. В ходе работы функции startGame идет проверка были ли инициализированны переменные и, если нет, то вызывает функцию initialization. При инициализации пользователь должен ввести определенные данные и нажать на кнопку отправки данных. При этом параметру player.initialized присваивается значение true. По завершению работы этой функции(т.е. после нажатия пользователем на кнопку initializationOk), должен выполниться блок команд, но только в том случае, если пользователь проинициализирован. В действительности получается так, что пока пользователь вводит свои данные, javascript уже проходит по всей функции startGame и после завершения функции initialization в startGame не возвращается. Мне казалось логичным, что следующие действия должны выполняться только по завершению функции initialization, однако это не так. Подскажите, пожалуйста, как приостановить выполнение скрипта, до завершения работы пользователя и возобновить после того, как пользователь ввел все данные. Вот функции в сокращенном варианте: var startGame = function(playerLogin) { var initialized = false; console.log(initialized + " до if"); if( !isInitialized(playerLogin)) { initialization(playerLogin); console.log(initialized + " в if"); } else { initialized = true; } console.log(initialized + " после if"); test("текст"); if (player.initialized == true) { //В эту секцию уже не попадаю } } var initialization = function(playerLogin) { player = new Player(playerLogin); //немного кода, ввод пользовательских данных $("#initializationOk").click(function(){ //еще немного кода и установка флага, что пользователь инициализирован player.initialized = true; }); } |
А не проще создавать Игрока при нажатии на initializationOk? Тогда не надо будет проверять есть ему данные или нет.
|
Цитата:
|
Ну да, все правильно, следующие действия выполняются только по завершении функции initialization (не называй функции существительными, кстати), в которой ты создаешь игрока и устанавливаешь обработчик клика по элементу с идентификатором initializationOk.
Тут есть два варианта - либо запрашивать данные с помощью функции prompt (при этом выполнение скрипта остановится до получения данных), либо перенести всю дальнейшую обработку в коллбек. Если этапов запроса данных много и нет цели поддерживать старые браузеры, то можно использовать генераторы или обещания. |
Часовой пояс GMT +3, время: 22:26. |