Angular6 Firebase获取触发多个时间的值

时间:2019-06-28 07:00:22

标签: angular firebase opentok

enter image description here

这是我的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节点。我只想仅感知sessionidtoken。但是会话和令牌是在运行时创建的。最初,此节点没有出现。仅显示参与参与者。会话初始化后,它创建了会话和令牌节点。有什么办法可以进行此操作。

此事件触发了多次....并且session created控制台显示了很多次。页面重定向后,值更改事件不会停止。如何停止此事件。

我使用了this.fbsub.unsubscribe();。但这不起作用。

请帮助我

1 个答案:

答案 0 :(得分:0)

订阅/meetinglist/350时,每次/meetinglist/350更新都会收到一个事件。 如果您只想预订tokensessionId,则可以将数据放在对象中(如果可以更新存储模型),如下所示:

{
  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');