J. *_*ers 5 socket.io ionic-framework ionic2 ionic3 angular
TLDR:订阅事件触发次数过多.
我有一个事件设置,当实时数据通过套接字进入时会被触发.
通过控制台日志我发现,实时数据只能出现一次.当实时数据进入时,被触发的事件也只被触发一次:
console.log("Event publish got fired!");
this.events.publish(EVENTSLUG_STAMP_UPDATE);
Run Code Online (Sandbox Code Playgroud)
每次数据进入时我才会看到此控制台日志.
这是奇怪的部分! subscriptoin evets多次触发!每次实时数据进入时,它都会再次触发.
this.events.subscribe(EVENTSLUG_STAMP_UPDATE, () => {
console.log("Event gets gets handled!");
// Do some code here. This code gets done to many times.
});
Run Code Online (Sandbox Code Playgroud)
所以我第一次看到实时数据:
Event publish got fired!
Event gets gets handled!
Run Code Online (Sandbox Code Playgroud)
在控制台中.第二次,我明白了
Event publish got fired!
Event gets gets handled!
Event gets gets handled!
Run Code Online (Sandbox Code Playgroud)
我第三次看到:
Event publish got fired!
Event gets gets handled!
Event gets gets handled!
Event gets gets handled!
Run Code Online (Sandbox Code Playgroud)
等等.我正在使用socket.io来获取实时数据.但正如我所说,用控制台日志填充我的代码我得出结论,只有订阅事件触发多次.每次事件再次发布时增加1.
任何帮助,将不胜感激!
编辑:我找到了一个有效的解决方法:
this.events.subscribe(EVENTSLUG_STAMP_UPDATE, () => {
this.navCtrl.setRoot('ScanSuccessPage').then(() => {
this.events.unsubscribe(EVENTSLUG_STAMP_UPDATE);
});
});
Run Code Online (Sandbox Code Playgroud)
所以我也花了一点时间努力解决这个问题.对我来说,最终的结果是我subscribe()在一个组件上被导致销毁并重新创建,因为我在应用程序中导航,但是我没有OnDestroy在组件上有一个事件处理程序,unsubscribe()因此每次实例化它都会添加另一个订阅处理程序.
注意:您还必须传递相同的事件处理程序unsubscribe(),请参阅Ionic2:取消订阅事件以避免重复条目?