【发布时间】:2018-05-14 11:51:23
【问题描述】:
在我的 Angular2 组件 constructor 中,我将 Firebase 中的值存储到一个变量中。
this.dbAction.getDB().take(1).subscribe(data => {
this.userVisitOrder = data[0][this.currentUserID]['settings']['visitOrder'];
console.log(this.userVisitOrder); // Value exists
});
我需要这个变量来构建我的 Observable 以使用特定的 Firebase 数据。同样在我的构造函数中:
this.visitsRef = afDatabase.list('data/users/' + this.currentUserID + '/visits/', ref => ref.orderByChild(this.userVisitOrder)); // Here the value is undefined
我认为这是一个异步问题,但如何访问存储在变量中的数据?
我的dbAction 服务中的getDb()函数如下所示:
getDB() {
return this.afDatabase.list(`data`).valueChanges().map((data) => data);
}
如果我尝试像这样将第二个代码放入第一个代码中:
this.dbAction.getDB().take(1).subscribe(data => {
this.userVisitOrder = data[0][this.currentUserID]['settings']['visitOrder'];
this.visitsRef = afDatabase.list('data/users/' + this.currentUserID + '/visits/', ref => ref.orderByChild(this.userVisitOrder));
this.visits = this.visitsRef.snapshotChanges().map(changes => {
return changes.map(c => ({ key: c.payload.key, ...c.payload.val() }));
});
});
...我收到以下控制台错误:
【问题讨论】:
-
第一种情况肯定是异步的。您无法在块外访问来自 .subscribe 的回报。第二个问题似乎 .getDB() 由于某种原因没有定义。从这个 sn-p 很难确定那会是怎样的。 (即你永远不会执行 .subscribe。)
-
我使用我的服务中的
getDb()帮助函数编辑了我的帖子。 :)
标签: angular typescript firebase ionic2 angularfire2