Показать сообщение отдельно
  #2 (permalink)  
Старый 10.02.2021, 23:04
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,775

Строка 22 return err;
будет выполняться синхронно и всегда возвращать true
Асинхронно будут выполняться только функции в стр. 15-17 в случае успеха и 18-21 в случае ошибки.

В асинхронном программировании приходится делать асинхронным все, что зависит от первой асинхронной операции
Поэтому функция chek должна возвращать не конкретное значение, а свой промис

function check(input) {
return 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();
                }
            }
        })
        .then(
			function() {
				return true;
			},
			function() {
				alert("Такой адрес электронной почты уже зарегистрирован");
				return false
			}
        );
}


и вызывать ее
check(input).then (function (result) {/*result будет true или false */})

Или в асинхронной функции
let result = await check(input)
/*result будет true или false тут его обрабатываем*/

Последний раз редактировалось voraa, 10.02.2021 в 23:08.
Ответить с цитированием