Typescript ionic 3 NGRX-状态更改订阅功能在单个状态更改时多次调用
我有一个离子3应用程序,我正在使用NGRX跟踪状态。 我的应用程序通过BLE连接到设备 在我的连接页面(连接到可编程设备)中,我有以下内容:Typescript ionic 3 NGRX-状态更改订阅功能在单个状态更改时多次调用,typescript,ionic3,ngrx,ngrx-store,Typescript,Ionic3,Ngrx,Ngrx Store,我有一个离子3应用程序,我正在使用NGRX跟踪状态。 我的应用程序通过BLE连接到设备 在我的连接页面(连接到可编程设备)中,我有以下内容: private connectionStateChangedCount: number; constructor(public navCtrl: NavController, public navParams: NavParams, private device: DeviceActionsD
private connectionStateChangedCount: number;
constructor(public navCtrl: NavController,
public navParams: NavParams,
private device: DeviceActionsDispatcherProvider) {
this. connectionStateChangedCount = 0;
console.log('CONNECTION - constructor ' + this. connectionStateChangedCount);
store.select(s => s.connection).subscribe(this.connectionStateChanged.bind(this));
}
// I only want this.device.onConnection() called ONCE when the deviceConnectionState is “connected
connectionStateChanged(connectionStore: any) {
if (connectionStore.deviceConnectionState === 'connected' &&
this. connectionStateChangedCount === 0) {
this.connectionStateChangedCount = this. connectionStateChangedCount + 1;
console.log('CONNECTION – connectionStateChanged ' + this. connectionStateChangedCount);
this.device.onConnection();
}
}
我所看到的是,偶尔(在chrome://inspect):
我不知道这是怎么发生的?”CONNECTION–connectionStateChangedCount正在递增,但订阅函数connectionStateChanged正在被调用两次,connectionStateChangedCount在这两种情况下都是1–背对背
我还尝试在if语句中将变量connectionStateChangedCount替换为unsubscribe以“try”,并阻止对这个.device.onConnection()的额外调用。这也不成功,我偶尔接到两个电话
其他一些注意事项:
任何关于为什么会发生这种情况的想法都很好。事实证明,问题是当我从一个页面转到另一个页面时,NGRX订阅存储仍然存在。当我从另一个页面返回连接页面时,它会再次重新订阅存储,导致connectionStateChanged触发两次 在离开连接页面之前,我现在取消订阅ionViewWillLeave()中的存储 这就解决了我的问题
connection.ts:67 CONNECTION – connectionStateChanged 1
connection.ts:67 'CONNECTION – connectionStateChanged 1