javascript - Firebase JavaScript : Callback function does not return anything

标签 javascript jquery firebase firebase-realtime-database

我正在创建一个聊天应用程序,允许用户创建房间来讨论特定主题。我遇到的一个问题是,当用户创建具有相同名称的房间时,数据会被覆盖。

我尝试遍历每个单独的房间,并检查输入的房间是否与用户创建的房间名称匹配。问题是我只能异步获取数据。我尝试实现回调函数来更新变量,但这似乎不起作用,因为我的警报命令不起作用。

Javascript/JQuery:

 var roomName = $.trim(document.getElementById("roomname").value.toLowerCase());

 var duplicate = function(roomname) {
  var found = false;
  roomsRef.on("child_added", function(snapshot) {
    if (found == roomname) {
      found = true;
    }
  });
 }

 duplicate(roomName, function(found) {
  alert(found); // State whether it's a duplicate room or not.
 });

数据库结构:

rooms
    -all
    -algorithms
    -boxing
    -javascript
    -money

最佳答案

您的代码中有一些小错误。这应该效果更好:

var roomName = $.trim(document.getElementById("roomname").value.toLowerCase());

var duplicate = function(roomname, callback) {
  var found = false;
  roomsRef.on("child_added", function(snapshot) {
    if (snapshot.key == roomname) {
      found = true;
      callback(snapshot.val())
    }
  });
}

duplicate(roomName, function(found) {
  alert(found); // State whether it's a duplicate room or not.
});

变化:

  • 您将回调传递给 duplicate(roomName, function(found) {...但是您的 duplicate 实现从未声明或使用该回调。我添加了一个参数回调,然后在找到房间时调用它。
  • 将 bool 值 found 与从文本元素获取的字符串 roomname 进行比较。这种比较永远不会是真的。您更有可能想要将数据库中的值与roomname进行比较。我的代码就是这样做的,尽管我不确定 snapshot.key 对于您的数据结构是否正确。

但是这段代码仍然是浪费的。您无需监听所有房间即可知道特定房间是否存在。你只需要检查一下是否有那个。这可以通过仅读取一个位置来完成:

var duplicate = function(roomname, callback) {
  var found = false;
  roomsRef.child(roomname).once("value", function(snapshot) {
    if (snapshot.exists()) {
      found = true;
      callback(snapshot.val())
    }
  });
}

关于javascript - Firebase JavaScript : Callback function does not return anything,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45131638/

相关文章:

javascript - QuickPager Javascript 适用于一次单击,但不适用于第二次单击

javascript - 使用 jQuery 检查父复选框

javascript - 如何像 Github 那样制作 52 周的参与条形图?

firebase - Firestore 查询 orderBy 不起作用?

firebase - 返回Firebase Flutter中的集合数时出错?

javascript - 在 JavaScript 中向当前日期添加天数

javascript - Cordova 'deviceready' 事件未从 Angular .run block 内触发

javascript - 获取所有可能集合的算法

jquery - 如何在离开 jQuery 中的元素之前删除类

ios - Swift Firestore 获取文档 ID