我正确使用 ForEach 吗?

2024-04-17

我正在 firebase 中开发一个类似存在的系统,其布局如下:

firebase {
   user1 {
     isOnline: true
   }
   user 2 {
     isOnline: true
   }
   user3 {
     isOnline: false
   }
}

isOnline 布尔值是我稍后将使用的将在线用户的名称输出到控制台的方法

例如,在上面的例子中,它会说:

user1 is online.
user2 is online.

这是我的代码:

var gameRef = new Firebase("https://xxx.firebaseio.com/");
var userOnline = new Firebase('https://xxx/.info/connected');

        userOnline.on('value', function (snapshot) {
          if (snapshot.val()) {
               gameRef.child(user).update({
                    isOnline : true
                });
          }
          else {
              gameRef.child(user).update({
                    isOnline : false
                });
          }
        });

       // for each user that is online, output to the console
       gameRef.forEach(function (snapshot) {
            var obj = snapshot.val();
            if(obj.isOnline == true) {
                console.log(obj.name + " is online.");
            }
        }); 

我的 forEach 似乎有问题,我该如何解决这个问题? 谢谢。


你不能forEach通过参考,但仅通过快照。

   // for each user that is online, output to the console
   gameRef.on('value', function(function(gamesSnapshot) {
       gamesSnapshot.forEach(function (snapshot) {
           var obj = snapshot.val();
           if(obj.isOnline == true) {
               console.log(obj.name + " is online.");
           }
       }
   }); 

此代码有两个快照变量:

  • gameSnapshot是父节点中的数据
  • snapshot是特定玩家的数据

选择

即使您只想与在线玩家打交道,上述方法也会下载所有玩家。在这种情况下,查询 Firebase 以便仅返回在线玩家会更有效。

   // for each user that is online, output to the console
   var onlinePlayers = gameRef.orderByChild('isOnline').equalTo(true);
   onlinePlayers.on('child_added', function(function(snapshot) {
       var obj = snapshot.val();
       if(obj.isOnline == true) {
           console.log(obj.name + " is online.");
       }
   }); 

该代码现在监听child_added事件,因为 Firebase 一次给我们一个玩家喂食。您可能还需要处理child_changed and child_removed,将播放器映射到 HTML 元素后。

尽管这会导致更多的代码,但我通常建议使用查询和child_*事件,因为它们限制了 Firebase 最初和例如在发生事件时向您发送的数据。玩家离线。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我正确使用 ForEach 吗? 的相关文章

随机推荐

  • 如何在 Windows 上的 Perl 中访问包含空格的路径?

    我正在将 Unix Perl 脚本转换为在 Windows 上运行 我遇到的问题是路径中含有空格 open IN C Program Files MySQL MySQL Server 5 1 bin mysql exe u root ppw
  • 从 App.xaml.cs 导航

    我想将应用程序栏添加到我的应用程序的多个页面 因此 我将应用程序栏定义为应用程序资源 以便它可以被多个页面使用 现在 这些按钮的事件处理程序位于App这里提到的类http msdn microsoft com en us library h
  • 如何确定所选节点是 TreeView 中的子节点还是父节点?

    如何判断所选节点是子节点还是父节点TreeView控制 具体如何实现此类检查取决于您如何定义 子 和 父 节点 但每个都暴露了两个属性TreeNode提供重要信息的对象 The Nodes财产 http msdn microsoft com
  • 如何编写本地化的屏幕键盘

    我必须为我们公司的程序编写一个屏幕键盘 该程序主要用于具有触摸功能的工业PC 我们不能使用windows默认键盘 因为我们不需要键盘上的所有按键 所以我被要求用 C 编写一个自定义的 我已经找到了这个博客 http www siao2 co
  • pandas - 数据框中唯一行出现的数量

    如何计算每个唯一行的出现次数DataFrame data x1 A B A A B A A A x2 1 3 2 2 3 1 2 3 df pd DataFrame data df x1 x2 0 A 1 1 B 3 2 A 2 3 A 2
  • AWS Lambda:无法导入模块

    请原谅我 我对 Lambda 和 Node 都是新手 我正在尝试复制this https gist github com bhberson 7a2847888596e67fd69bgit 使用 AWS IoT 按钮订购披萨 我当前的代码是
  • 根据屏幕尺寸有固定方向

    我在手机上构建了一个 Android 应用程序 现在我要更新该应用程序以支持平板电脑尺寸的屏幕 特别是 Galaxy Tab 10 1 我弄清楚了整个res layout的事情 所以没关系 但是 我构建的应用程序具有固定的屏幕方向Andro
  • iPhone 平台的开源框架/项目 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找适用于 iPhone 平台的开源框架 项目集合 我发现了很多好的框架和资源 例如ASIHTTP
  • 使用 appSettings 配置自定义 Serilog 接收器

    我创建了一个新的 Serilog 自定义接收器 并尝试通过 appSettings 配置它 自定义接收器名为 DiagnosticsBroadcaster 它的 LoggerSinkConfiguration 扩展是 public stat
  • 更新 WooCommerce 产品价格和库存

    我有外部 REST API 我从中构建一个如下所示的数组 arr array 1 gt array code gt 0100686 qty gt 2 price gt 65 22 2 gt array code gt 0100687 qty
  • 使用groupSVGElements后如何选择子元素

    我正在将 svg 加载到具有子元素的 Fabric 中 我使用 groupSVGElements 对它们进行分组 我需要能够选择每个子元素 这是一个 onclick 事件 允许我选择一个子对象 我把这个小提琴放在一起http jsfiddl
  • 如何从 WebAPI 中的自定义绑定器调用默认模型绑定?

    我在 WebAPI 中有一个自定义模型绑定器 它使用 Sytem Web Http ModelBinding 命名空间中的以下方法 该方法is用于为 Web API 创建自定义模型绑定程序的正确命名空间 public bool BindMo
  • 如何在 Prolog 中为变量(如字符串)分配多个值?

    今天早些时候 我寻求帮助以在序言中构建数据库以及如何通过参数搜索 有人提出了这个 您还可以向每个处理器添加术语列表 例如 processor pentium g4400 brand intel family pentium series g
  • 如何从两个不同的数组中替换 numpy 数组的元素

    对于数组 array2 np array np nan np nan np nan np nan 45 np nan 33 np nan np nan 32 np nan np nan 44 np nan 10 53 np nan 我需要按
  • Angular w/Jest:“verify()”与“expectOne()”?

    我有一个失败的测试 我不知道如何修复 我从 Jest 收到的错误消息似乎是矛盾的 问题与两个人的行为有关Angular HttpTestingController https angular io api common http testi
  • 如何获取命名空间元素的属性

    我正在解析每天从供应商那里收到的 XML 文档 它大量使用命名空间 我已将问题最小化到最小子集 我需要解析一些元素 所有这些元素都是具有特定属性的元素的子元素 我能够使用lxml etree Element findall TAG root
  • 节点守护进程不会以 process.stdin.setRawMode(true) 启动[重复]

    这个问题在这里已经有答案了 我正在运行节点服务器守护程序 但我不断遇到此错误 当我运行 bash strip 来测试应用程序时 我得到TypeError process stdin setRawMode is not a function
  • 使用无头选项时出现 ElementNotInteractableException 错误

    当我尝试运行下面的代码时出现错误 Error is ElementNotInteractableException 消息 元素不可交互 会话信息 headless chrome 83 0 4103 116 这似乎是因为chromeOptio
  • Ant 条件 - 'if' 或 'unless' 哪个先出现

    Question 如果 ant 目标同时使用if and unless 首先评估哪个 Example 先有鸡还是先有蛋
  • 我正确使用 ForEach 吗?

    我正在 firebase 中开发一个类似存在的系统 其布局如下 firebase user1 isOnline true user 2 isOnline true user3 isOnline false isOnline 布尔值是我稍后将