На сколько я знаю, 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?