【问题标题】:Firebase Javascript: Callback function does not return anythingFirebase Javascript:回调函数不返回任何内容
【发布时间】:2017-07-17 04:40:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript jquery firebase firebase-realtime-database


    【解决方案1】:

    您的代码中有很多小错误。这应该会更好:

    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 实现从未声明或使用该回调。我为回调添加了一个参数,然后在找到房间时调用它。
    • 您将布尔值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())
        }
      });
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-23
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 2017-12-14
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      相关资源
      最近更新 更多