异步访问 Firebase 中的数组

2024-04-13

这是我的代码:

var userRef = new Firebase("https://awesome.firebaseio.com/users/");

var tokenRef = userRef.child(key+'/tokens');
tokenRef.once('value', function(snapshot){

  var userTokenSync = $firebase(tokenRef);
  var userTokens = userTokenSync.$asArray();


  console.log(userTokens);
  console.log(userTokens[0]);
        
  for(var i=0, len = userTokens.length; i < len; i++) {
     console.log(userTokens[i]);
  }
  console.log('done');
})

这段代码从 firebase 获取用户的令牌,我只想浏览令牌数组。

这是控制台给我的内容:

如您所见,我无法访问该数组。你知道我该怎么做吗?

提前致谢。


欢迎来到异步加载101。

  var userTokens = userTokenSync.$asArray();

  console.log(userTokens);
  console.log(userTokens[0]);

  for(var i=0, len = userTokens.length; i < len; i++) {
     console.log(userTokens[i]);
  }
  console.log('done');

该片段的第一行starts从 Firebase 加载您的数据。但加载可能需要一些时间。由于浏览器不想阻止某些事情,因此它会继续执行脚本。

当浏览器执行你的console.log(userTokens);数据很可能尚未加载。所以它只是将对象作为占位符打印到控制台。

当它到达for循环中,数据可能已从 Firebase 加载,也可能尚未加载。

在某个时刻,您单击了已记录的旁边的箭头userTokens。此时数据已从 Firebase 加载,并且控制台显示最新数据。

该解决方案由 AngularFire 以承诺的形式提供。 AngularFire 承诺在未来的某个时候为您提供数据。如果您有一段代码只应在加载数据时执行,您可以这样编写:

  var userTokens = userTokenSync.$asArray();

  console.log(userTokens);
  console.log(userTokens[0]);

  userTokens.$loaded(function(userTokens) {
    for(var i=0, len = userTokens.length; i < len; i++) {
      console.log(userTokens[i]);
    }
    console.log('done');
  });

  console.log('at last line, but not done yet');

Update

请注意,上面是何时使用的一个不好的例子$loaded. Since $loaded只会触发一次,它只会记录initial数组的内容。如果您只是想查看数据是否/何时加载,惯用的方法是添加userTokens范围:

$scope.userTokens = userTokens;

并将其添加到您的视图/HTML 中:

<pre>{{ userTokens | json }}</pre>

AngularFire 现在将监控何时以任何方式加载或修改 userTokens,并在发生这种情况时告诉 AngularJS 更新视图。

另请参阅这些:

  • Firebase、AngularJS 和 GeoFire - 等待工厂的响应 https://stackoverflow.com/questions/26897841/firebase-angularjs-and-geofire-wait-for-response-from-factory/26911173#26911173
  • Firebase angularfire child.$asObject 给出未定义的属性 https://stackoverflow.com/questions/26604472/firebase-angularfire-child-asobject-give-properties-undefined/26673597#26673597
  • angularfire - 为什么我不能循环 $asArray 返回的数组? https://stackoverflow.com/questions/26395912/angularfire-why-cant-i-loop-over-array-returned-by-asarray/26403301#26403301
  • 将父作用域中的变量传递给回调函数 https://stackoverflow.com/questions/26297654/passing-variable-in-parent-scope-to-callback-function/26299662#26299662
  • 尝试从 Firebase 获取子记录 https://stackoverflow.com/questions/26268446/trying-to-get-child-records-from-firebase/26277382#26277382

是的...我们经常被问到这个问题。

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

异步访问 Firebase 中的数组 的相关文章

随机推荐

  • 无法在通知服务扩展中使用 pod

    我正在创建一个通知扩展 按照规范添加目标并在其中添加一个 pod 如下所示 Step 1 target MyProject do Integration Frameworks pod Fabric pod Crashlytics pod M
  • 是否有 Angular 的 json 格式化程序(指令/组件)?

    我正在将应用程序从 AngularJS 升级到 Angular 在 AngularJS 中我使用了https github com mohsen1 json formatter https github com mohsen1 json f
  • Google 云存储:将字符串上传到 GCS 时 CRC32C 和 MD5 不匹配

    尝试上传 JSON 字符串并覆盖 GCS 存储桶中的现有对象时 出现以下错误 google api core exceptions BadRequest 400 POST https storage googleapis com uploa
  • 如何在 PHP 中使用 set_error_handler 捕获未定义的函数

    我正在迈出一步 我的 PHP 脚本都会优雅地失败 至少 这是我所希望的 我不想 实际上 将每一行换行try catch语句 所以我认为最好的选择是为文件的开头创建一个自定义错误处理程序 我正在练习页面上测试它 function custom
  • 使用 sed 替换相同长度的文本

    有没有办法使用 sed 替换具有相同长度的其他内容 例如点 零等 的模式 像这样 maci san echo She sells sea shells by the sea shore sed s sh a z gI sells sea b
  • 自定义 ListView 在单击时不突出显示 ListViewItem

    我有一个由 ImageView 和 TextView 组成的自定义列表视图 单击效果很好 但它不会像普通 ListView 那样突出显示该项目 我该如何添加亮点 我尝试通过在单击时设置背景颜色然后添加计时器来删除背景颜色来对其进行装配 这有
  • StorageServiceAccountSample 应用程序报告“未找到 KeyStore JKS 实现”

    第一行存储服务帐户示例 http samples google api java client googlecode com hg storage serviceaccount cmdline sample instructions htm
  • Antlr4 语言翻译 - 将模板逻辑与访问者类分开?

    我正在考虑实用地将大量相对简单的 TSQL 代码转换为 Groovy 代码 肯定有很多原因 但驱动因素只是想看看是否可以完成 并在此过程中了解编译器 语法 等 Antlr4 似乎是解决这个问题的理想工具 Java 是一个优点 标记化 解析
  • 从 LiveData 观察者调用时,导航组件默认后退堆栈不起作用

    我正在使用带有导航抽屉的 Android 导航组件 如 Android Studio 模板中所示 我有片段 A B C 作为顶级片段 用于导航抽屉 片段 Z 与导航图中的片段 A 连接 现在我在片段 A 中有一个按钮 单击该按钮将使用安全参
  • 龙目岛项目有哪些风险?

    我正在制定新的一年的性能目标 并且我认为减少代码库 尤其是样板文件 大小的目标会很有趣 我想出解决这个问题的一个行动是使用龙目岛计划 http projectlombok org 使豆子尽可能短 但我习惯于忽视新软件和方法的缺点 因此我依赖
  • 如何发送对象作为查询并在 MERN 堆栈中使用 $all 运算符?

    我正在尝试使用 MERN 堆栈为我的网络应用程序创建一个过滤系统 目前 我能够接收用户对要过滤的内容的请求 接收该数据 查看用户输入的数据 因为用户还可以在特定类别中指定 任何 这意味着它将发送一个空字符串或数组到后端 解析该数据并将其转换
  • 如何刷新 Entity Framework Core DBContext?

    当我的表被另一方更新时 dotnet core中的数据库上下文仍然返回旧值 如何强制刷新数据库上下文 我做过研究 但我只发现人们使用Reload强制刷新上下文的方法 EF core 中不可用 其他一些解决方案建议在使用后处置上下文 但我收到
  • 如何在C++中计算数组中元素的数量?

    我的数据位于包含两列 x 值和 y 值的文本文件中 该文件上的数据点数量可以不同 但 永远不会超过 1000 因此我声明了两个数组 x 1000 和 y 1000 我必须读取数据文件并为每个数字分配一个特定的变量 以便稍后可以使用它进行一些
  • PHP - 清理垃圾

    我继承了一个非常混乱的项目 我能看出至少有3个版本 是否有一个实用程序可以跟踪主index php 中的PHP 代码 以便我可以找出哪些内容未使用 哪些内容正在使用 或者我是否一直在进行手动清理 Thanks Update 我认为我不清楚我
  • Delphi Enterprise:如何在没有循环引用的情况下应用访问者模式?

    使用 Delphi 2009 Enterprise 我在模型视图中为 GoF 访问者模式创建了代码 并将代码分为两个单元 一个用于域模型类 一个用于访问者 因为我可能需要其他单元来实现不同的访问者实现 所有内容都在一个单位 大泥球 http
  • 我如何将块传递给Python中的函数,就像在Ruby中传递块的方式一样

    在 Ruby 中 我可以将代码块传递给方法 例如 我可以将不同的代码块传递给get schedules with retries method 并通过调用 black call 来调用该块 我想知道如何用Python实现这个逻辑 因为我有很
  • System.IO.IOException:打开的文件太多

    在 Mac OS X 上调试 ServiceStack Web 应用程序时 我间歇性地收到此错误 我似乎无法确定它是什么 我尝试使用以下命令杀死 xamarin Web 服务器 ps aux grep xsp4 grep v grep aw
  • SQL 多列大于表达式

    看到以下与游标分页结果相关的 SQL 但无法找到有关其部分工作原理的更多信息 SELECT b FROM books b WHERE b name id gt select b2 name b2 id from books b2 where
  • setState() 在 dispose() 之后调用

    当我单击凸起的按钮时 时间选择器就会出现 现在 例如 如果我等待 5 秒 然后确认时间 就会出现此错误 setState 在 dispose 之后调用 我确实在控制台中看到 flutter 如何更新父 widget 但为什么呢 我什么也没做
  • 异步访问 Firebase 中的数组

    这是我的代码 var userRef new Firebase https awesome firebaseio com users var tokenRef userRef child key tokens tokenRef once v