数组 – 在Firebase中异步访问数组
这是我的代码:
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'); 该片段的第一行开始从Firebase载入数据.但是加载可能需要一些时间.而且由于浏览器不想阻止它,所以继续执行脚本. 当浏览器执行你的console.log(userTokens);数据最有可能尚未加载.所以它只是将对象作为占位符打印到控制台. 当它到达for循环时,数据可能已经还可能还没有从Firebase加载. 在某些时候,您点击了记录的用户名称旁边的箭头.当时数据已从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'); 更新 注意上面是一个坏的例子,何时使用$loaded.由于$loaded将仅触发一次,它将只记录数组的初始内容.如果您只是想/看到/数据何时加载,则惯用方法是将userTokens添加到范围中: $scope.userTokens = userTokens; 并将其添加到您的视图/ HTML: <pre>{{ userTokens | json }}</pre> AngularFire现在将以任何方式监视userTokens何时加载或修改,如果发生这种情况,AngularFire将会更新视图. 还可以看到这些: > Firebase,AngularJS and GeoFire – wait for response from factory 嗯…我们得到这个问题很多 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- angular-ui-router – Angular UI Router – 允许任何查询字
- ace bootstrap后台框架(一)
- shell – shrewsoft命令行界面,用于连接和终止ubuntu上的vp
- forkJoin不适用于AngularFire2 valueChanges
- Docker下Ubuntu系统编译安装HAprox+Keepalived+MySQL负载高
- 仅使用bash/standard Linux命令,在字符串中单行和双引号
- Bootstrap组件之导航条
- vim – 如何在多个拆分窗口中同步光标移动?
- angularjs – ngndo的Kendo MultiSelect更新
- scala – SBT程序集插件的DeDuplication错误