Typescript ionic 3 NGRX-状态更改订阅功能在单个状态更改时多次调用

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

我有一个离子3应用程序,我正在使用NGRX跟踪状态。 我的应用程序通过BLE连接到设备

在我的连接页面(连接到可编程设备)中,我有以下内容:

 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()的额外调用。这也不成功,我偶尔接到两个电话

其他一些注意事项:

  • 发生这种情况时,我看不到对连接页构造函数的多次调用
  • 当我在app.component.ts中断开与BLE设备的连接–this.nav.setRoot(ConnectionPage)并尝试连接到ConnectionPage(根)上的BLE设备时,它会显示出来

  • 任何关于为什么会发生这种情况的想法都很好。

    事实证明,问题是当我从一个页面转到另一个页面时,NGRX订阅存储仍然存在。当我从另一个页面返回连接页面时,它会再次重新订阅存储,导致connectionStateChanged触发两次

    在离开连接页面之前,我现在取消订阅ionViewWillLeave()中的存储

    这就解决了我的问题

    connection.ts:67  CONNECTION – connectionStateChanged 1 
    connection.ts:67 'CONNECTION – connectionStateChanged 1