返回在函数内部不起作用(快照)

时间:2018-07-31 15:31:36

标签: javascript firebase

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个小时的问题。预先感谢

1 个答案:

答案 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.
    });
}