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

标签 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 个小时里,我已经完成了研究并一直在努力解决这个问题。提前致谢

最佳答案

首先,您不能像在简单的 if 语句中那样使用 promise 结果。您应该执行以下操作:

isDisplayNameTaken($userdisplayNameField.val()).then(taken => {
    console.log('Is it taken?', taken);
});

在您使用简单的 if 的示例中 - if 语句将 promise 对象检查为其条件而不是已解析的值。

为此,isDisplayNameTaken 需要返回一个 promise (它没有)。

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

关于javascript - 返回在函数内部不起作用(快照),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51617066/

相关文章:

javascript - JSONP 不起作用?

javascript - 在 Electron 文件对话框中按扩展名过滤

javascript - 滚动时引导元素通过页面的方法

javascript - 在 chrome 扩展中,如何使用内容脚本注入(inject) Vue 页面

firebase - 未找到文件 Flutter/Flutter.h

javascript - Node.js 中的 for 循环顺序错误(谷歌日历 api、mongojs)

android - 如何检测数据在离线 Android 应用程序期间添加到 firestore

ios - 登录功能不工作..抛出错误...Firebase 和 Xcode 9

javascript - 列表状态更新时 react native 平面列表图像闪烁