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个小时的问题。预先感谢
答案 0 :(得分:1)
首先,您无法在简单的if
语句中使用诺言结果。您应该执行以下操作:
isDisplayNameTaken($userdisplayNameField.val()).then(taken => {
console.log('Is it taken?', taken);
});
在您的示例中,使用简单的if
-if
语句将promise对象作为其条件而非解析值进行检查。
要执行此操作,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.
});
}