function isDisplayNameTaken(name) {
firebase
.database()
.ref()
.child("users")
.orderByChild("username")
.equalTo(name)
.once("value")
.then((snapshot) => {
return snapshot.exists();
});
}
Я пытался проверить, находится ли имя пользователя уже в базе данных до регистрации пользователя, но возврат не работает, и что-либо внутри функции (моментальный снимок) не изменяет другие глобальные переменные, чтобы обойти его.
if(isDisplayNameTaken($userDisplayNameField.val())) {
numberOfChecksPassed += 1
}
Это условие не проходит. Я провел мое исследование и пытался решить проблему в течение последних 5 часов. заранее спасибо
Во-первых, вы не можете использовать результаты обещаний, поскольку вы пытаетесь выполнить простой оператор if
. Вы должны сделать следующее:
isDisplayNameTaken($userdisplayNameField.val()).then(taken => {
console.log('Is it taken?', taken);
});
В вашем примере с простым if
- оператор if
проверяет объект обещания как условный, а не разрешенный.
Чтобы это сработало, isDisplayNameTaken
нужно будет вернуть обещание (а это не так).
function isDisplayNameTaken(name) {
return firebase // Notice the return here.
.database()
.ref()
.child("users")
.orderByChild("username")
.equalTo(name)
.once("value")
.then((snapshot) => {
return snapshot.exists(); // This return will resolve the promise but you are not returning the resolved promise out of the function.
});
}