离子事件发生太多次。每次触发时增加1?

时间:2018-03-01 10:09:24

标签: angular ionic-framework socket.io ionic2 ionic3

TL; DR:订阅事件触发次数过多。

我有一个事件设置,当实时数据通过套接字进入时会被触发。

通过控制台日志我发现,实时数据只能出现一次。当实时数据进入时,被触发的事件也只会被触发一次:

console.log("Event publish got fired!");
this.events.publish(EVENTSLUG_STAMP_UPDATE);

每次数据进入时,我只会看到此控制台日志。

这是奇怪的部分:订阅事件多次触发!每次实时数据进入时,它都会再次触发。

this.events.subscribe(EVENTSLUG_STAMP_UPDATE, () => {
  console.log("Event gets gets handled!");
  // Do some code here. This code gets done to many times.
});

所以我第一次看到实时数据:

Event publish got fired!
Event gets gets handled!

在控制台中。第二次,我看到

Event publish got fired!
Event gets gets handled!
Event gets gets handled!

我第三次看到:

Event publish got fired!
Event gets gets handled!
Event gets gets handled!
Event gets gets handled!

等等。我正在使用socket.io来获取实时数据。但正如我所说,用控制台日志填充我的代码我得出结论,只有订阅事件触发多次。每次事件再次发布时增加1。

修改

我找到了一个有效的解决方法:

this.events.subscribe(EVENTSLUG_STAMP_UPDATE, () => {
  this.navCtrl.setRoot('ScanSuccessPage').then(() => {
    this.events.unsubscribe(EVENTSLUG_STAMP_UPDATE);
  });
});

2 个答案:

答案 0 :(得分:5)

所以我也花了一点时间努力解决这个问题。对我来说,最终的结果是我在一个组件上有subscribe(),当我在应用程序中导航时,它被销毁并重新创建,但我在组件上没有OnDestroy事件处理程序unsubscribe() 1}}所以每次实例化它都会添加另一个订阅处理程序。

注意:您还必须将相同的事件处理程序传递给unsubscribe(),请参阅Ionic2: Unsubscribe Event to Avoid Duplicate Entries?

答案 1 :(得分:0)

不使用时将其删除(不幸的是,它不使用“一次”)

//handler as property
private handler=(args)=>{...};


...    

events.subscribe(handler); 

...

ionViewWillLeave(){
    this.events.unsubscribe(handler)
}
相关问题