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);
});
});
答案 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)
}