It seems my code is returning the values before completing the fetch request. I keep getting alert for 'invalid' before the alert for 'success'. Can anyone suggest a way to fix my problem? My full source code can be found here: https://github.com/SophalLee/project_04_sophal_lee.git.
registrationForm.addEventListener('submit', (e) => {
e.preventDefault();
if(checkInputs()) {
alert('ok')
//if(registrationForm.submit();
}
else {
alert('Invalid')
}
});
/* Validate input from form */
function checkInputs() {
const firstnameValue = firstname.value.trim();
const lastnameValue = lastname.value.trim();
const emailValue = email.value.trim();
const passwordValue = password.value.trim();
const confirmPasswordValue = confirmPassword.value.trim();
let firstnameSuccess = false;
let lastnameSuccess = false;
let emailSuccess = false;
let passwordSuccess = false;
let confirmPasswordSuccess = false;
....
if(emailValue === '') {
setErrorFor(email, "Email cannot be blank");
emailSuccess = false;
}
else if(!emailCheck(emailValue)) {
setErrorFor(email, "Invalid email");
emailSuccess = false;
}
else {
const options = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ "email": emailValue }),
};
fetch('http://localhost:3000/emailcheck', options)
.then(response => response.json())
.then(data => {
if(data.match) {
setErrorFor(email, "Email already exists");
emailSuccess = false;
}
else {
setSuccessFor(email);
emailSuccess = true;
alert('success');
}
});
}
....
return (firstnameSuccess && lastnameSuccess && emailSuccess && passwordSuccess && confirmPasswordSuccess)
}