Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.10.2014, 14:43
Новичок на форуме
Отправить личное сообщение для Dantered Посмотреть профиль Найти все сообщения от Dantered
 
Регистрация: 20.10.2014
Сообщений: 1

Непоследовательное выполнения кода.
Добрый день, всем.

Столкнулся с тем, что код выполняется не в той последовательности, в которой мне нужно.

В ходе работы функции 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;
	});
}
Ответить с цитированием
  #2 (permalink)  
Старый 20.10.2014, 15:31
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

А не проще создавать Игрока при нажатии на initializationOk? Тогда не надо будет проверять есть ему данные или нет.
Ответить с цитированием
  #3 (permalink)  
Старый 20.10.2014, 15:37
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Цитата:
if (player.initialized == true) {

                //В эту секцию уже не попадаю

    }
Вы сюда и не попадете из-за асинхронности.
Ответить с цитированием
  #4 (permalink)  
Старый 20.10.2014, 16:06
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Ну да, все правильно, следующие действия выполняются только по завершении функции initialization (не называй функции существительными, кстати), в которой ты создаешь игрока и устанавливаешь обработчик клика по элементу с идентификатором initializationOk.
Тут есть два варианта - либо запрашивать данные с помощью функции prompt (при этом выполнение скрипта остановится до получения данных), либо перенести всю дальнейшую обработку в коллбек. Если этапов запроса данных много и нет цели поддерживать старые браузеры, то можно использовать генераторы или обещания.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Последовательность выполнения кода Makeda Общие вопросы Javascript 1 16.06.2014 14:35
Последовательность выполнения кода Makeda Общие вопросы Javascript 0 16.06.2014 13:59
Выполнения и остановка кода по клику Партизан Общие вопросы Javascript 11 13.05.2012 18:29
Какой есть обработчик событий, который будет запускаться после выполнения всего кода? KamalovRadik jQuery 12 08.11.2011 07:14
Скорость выполнения кода mycoding Общие вопросы Javascript 6 23.04.2010 13:28