【发布时间】:2018-08-09 09:03:39
【问题描述】:
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);
});
});
【问题讨论】:
-
this.events.subscribe 在哪里...?
-
在被设置为 root 的页面的构造函数内部,例如
navCtrl.setRoot('PageWIthSubscription')。我找到了解决方法,请参阅编辑 :)
标签: angular ionic-framework socket.io ionic2 ionic3