Javascript 返回函数内部不工作(快照)

Javascript 返回函数内部不工作(快照),javascript,firebase,Javascript,Firebase,在注册用户之前,我一直在尝试检查数据库中是否已经有用户名,但返回不起作用,函数(快照)中的任何内容也不会更改其他全局变量来绕过它 function isDisplayNameTaken(name) { firebase .database() .ref() .child("users") .orderByChild("username") .equalTo(name) .once("value") .then((snapshot) =&

在注册用户之前,我一直在尝试检查数据库中是否已经有用户名,但返回不起作用,函数(快照)中的任何内容也不会更改其他全局变量来绕过它

function isDisplayNameTaken(name) {
  firebase
    .database()
    .ref()
    .child("users")
    .orderByChild("username")
    .equalTo(name)
    .once("value")
    .then((snapshot) => {
      return snapshot.exists();
    });
}

这是无法通过的条件。在过去的5个小时里,我已经做了研究并试图解决这个问题。首先,请提前感谢,您不能在一个简单的
if
语句中使用promise结果。您应该执行以下操作:

if(isDisplayNameTaken($userDisplayNameField.val())) {
  numberOfChecksPassed += 1
}
在您的示例中,使用一个简单的
if
if
语句将promise对象检查为其条件值,而不是解析值

要使其正常工作,
isDisplayNameTake
需要返回一个承诺(它没有)

isDisplayNameTaken($userdisplayNameField.val()).then(taken => {
    console.log('Is it taken?', taken);
});
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.
    });
}