Показать сообщение отдельно
  #1 (permalink)  
Старый 12.08.2013, 13:15
Кандидат Javascript-наук
Отправить личное сообщение для FanAizu Посмотреть профиль Найти все сообщения от FanAizu
 
Регистрация: 08.03.2011
Сообщений: 148

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

Прочел все это в статьях различных.

Вот мой код:
function test()
{
	console.log(1);
	alert(1);
	console.log(2);
	$.ajax
	(
		{
			type: "POST",
			dataType: "json",
			contentType: "application/json",
			url: apiRoute + "auth",
			data: model,
			complete: function (data) 
			{console.log(3);alert(2);console.log(4);
				parcelDataJtLog.authenticationStatusCode = data.status;
				parcel.parcel('endFakeValidation');
			},
			headers:
			{
				'RequestVerificationToken': token
			},
			xhrFields: 
			{
				withCredentials: true
			}
		}
	);
	console.log(5);
	alert(3);
	console.log(6);
	alert(4);
	console.log(7);
	return true;
}

test();


Исходя из описанного в начале поста, в консоль должно быть выведено:

1, 2, 5, 6, 7, 3, 4.
То есть: вывело в консоль 1, открылся алерт с цифрой 1, закрыл алерт, вывело в консоль 2, вывело в консоль 5, открылся алерт с цифрой 3, вывело в консоль 6, открылся алерт с цифрой 4, закрыли алерт, вывело в консоль 7, из очереди выполнения выполняется обработчик события завершения аякса, вывело в консоль 3, открылся алерт с цифрой 2, закрыли алерт, вывело в консоль 4.

Но на практике имею:
1, 2, 5, 3, 4, 6, 7

Что не так в моем понимание работы js?
Ответить с цитированием