Показать сообщение отдельно
  #3 (permalink)  
Старый 11.02.2021, 00:26
Новичок на форуме
Отправить личное сообщение для asdffak Посмотреть профиль Найти все сообщения от asdffak
 
Регистрация: 17.01.2017
Сообщений: 7

Блин, как сложна та!
В любом случае спасибо за помощь.

Интересно, а есть вариант решить ту же задачу без промисов? Или это самый не костыльный вариант?
Потому что на мой взгляд код выглядит как-то перегруженно и трудно читаем.
Кроме того задача оказывается нескольо сложнее, поскольку я привел лишь часть кода и рально функция 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.
Это что, получается мне нужно будет все кейсы оборачивать во внутренний промис?

Последний раз редактировалось asdffak, 11.02.2021 в 00:39.
Ответить с цитированием