这是我的firebase结构。 在参与参与者下,每个ID具有多个键值对。
我要检查会话ID是否未定义。
我使用了以下代码
let fburl = '/meetinglist/350' ;
this.fbsub = this.db.list(fburl).valueChanges().subscribe(res => {
if(res[1] != undefined) {
console.log("session created")
}
});
但是这里的值更改事件触发了多次。对于值更改事件,它也可以感知engagement_participant
节点。我只想仅感知sessionid
和token
。但是会话和令牌是在运行时创建的。最初,此节点没有出现。仅显示参与参与者。会话初始化后,它创建了会话和令牌节点。有什么办法可以进行此操作。
此事件触发了多次....并且session created
控制台显示了很多次。页面重定向后,值更改事件不会停止。如何停止此事件。
我使用了this.fbsub.unsubscribe();
。但这不起作用。
请帮助我
答案 0 :(得分:0)
订阅/meetinglist/350
时,每次/meetinglist/350
更新都会收到一个事件。
如果您只想预订token
和sessionId
,则可以将数据放在对象中(如果可以更新存储模型),如下所示:
{
350: {
tokens: {
token: "...",
sessionId: "..."
}
}
}
然后使用以下命令订阅/meetinglist/350/tokens
:
this.db.list('/meetinglist/350/tokens').valueChanges().subscribe( ... );
您可以使用以下代码退订列表更改: (From angularfire2 rep)
this.mySubcribtion = this.db.list('/meetinglist/350/tokens').valueChanges().subscribe(
...
);
// Later
this.mySubcribtion.unsubscribe();
在某些情况下,您可能需要数据快照而不监听 进行更改,例如在初始化不需要的UI元素时 期待改变。您可以使用Once()方法简化此过程 场景:触发一次,然后不再触发。
您可以使用以下代码进行操作: (From angularfire2 rep)
const sessionIdPromise = this.db.list(fburl).query.once('value');
const tokenPromise = this.db.list(fburl).query.once('value');