Блин, как сложна та!
В любом случае спасибо за помощь.
Интересно, а есть вариант решить ту же задачу без промисов? Или это самый не костыльный вариант?
Потому что на мой взгляд код выглядит как-то перегруженно и трудно читаем.
Кроме того задача оказывается нескольо сложнее, поскольку я привел лишь часть кода и рально функция check проверяет вообще все input'ы согласно их имени, но запрос на сервер предусмотрен только в одном случае:
function check(input) {
let err = true;
switch(input.name) {
case "email":
let email_promise = new Promise(function(resolve, reject) {
let xml = new XMLHttpRequest();
xml.open("POST", "script/LoginCheck.php", true);
xml.send();
xml.onreadystatechange = function() {
if (xml.readyState == 4 && xml.status == 200) {
let rm = /^[\w\.\d-_]+@[\w\.\d]+\.[\w\.\d]+$/i;
if (xml.responseText == true && rm.test(input.value)) resolve();
else reject();
}
}
});
email_promise.then(function() {
err = true;
},
function() {
err = false;
alert("Такой адрес электронной почты уже зарегистрирован");
});
break;
case "..."
if(...) ...;
else err = false;
break
case "..."
break;
......
return err;
}
Т.е. в каждом кейсе выполняется проверка и, если поле его не проходит, то err = false.
Это что, получается мне нужно будет все кейсы оборачивать во внутренний промис?