验证函数自己运行,但在另一个函数中调用时无效。我要检查的只是查看电子邮件地址是否已在数据库中。
我尝试了太多的事情在这里提到,但这是最终的代码。当我在chrome中运行该函数时,它可以按预期工作,但是在另一个函数中调用它不会产生相同的结果。
var userExist = 'not set';
function checkEmail(email){
firebase.database().ref().child("users").orderByChild("email").equalTo(email).on('value', function (snapshot) {
snapshot.forEach(function(childSnapshot) {
var name = childSnapshot.val();
if(name.email === email){
userExist = true;
}
});
});
}
document.querySelector('#mySubmit').addEventListener('click', function(e) {
const today = new Date();
const userID = uniqueID();
const firstName = document.querySelector('#firstName').value;
const lastName = document.querySelector('#lastName').value;
const email = document.querySelector('#email').value;
const address = document.querySelector('#addressLine').value;
const city = document.querySelector('#city').value;
const province = document.querySelector('#province').value;
const postalCode = document.querySelector('#postalCode').value;
const createdDate = `${today.getFullYear()} - ${today.getMonth() + 1} - ${today.getDate()}`
checkEmail(email);
if(userExist === 'not set'){
writeUserData(userID, firstName, lastName, email, address, city, province, postalCode, createdDate);
showAlert('The client has been added to the Database', 'success')
} else {
showAlert('The email address is already in use', 'danger')
}
基本上,checkEmail(email)应该将全局var userExist =“ not set”更改为true。在控制台中执行此操作即可。
我真的是想让它仅与香草JS一起使用。我知道有一些库和框架可以简化这一过程。
此外,我仍然是一名学习者,因此代码对于您而言可能不是“可接受的”。 :-)
编辑:称我为愚蠢,但我认为问题可能出在此:
setTimeout(function(){
window.location.reload()
}, 2000)
因为我没有使用任何库,所以我不知道另一种刷新页面的方法,以便显示新添加的“客户端”。我现在也认为这是问题所在,因为checkEmail(email)可能会更改全局变量,但是随后页面重置将其更改回原来的位置,因此我的if语句无法按预期工作。