【问题标题】:Unsubscibe from firestore onSnapshot listener when the user just exits from the app当用户刚刚退出应用程序时,从 firestore onSnapshot 监听器中取消订阅
【发布时间】:2019-06-02 22:20:40
【问题描述】:

我在尝试在 firestore onSnapshot 侦听器上实现取消订阅时遇到问题。问题是当我尝试覆盖后退按钮的功能时,后退按钮不会关闭应用程序,而且我不确定它是否取消订阅 onSnapshot 监听器,如果它取消订阅,那么如何关闭应用程序.

编写我尝试过的代码:

platform.registerBackButtonAction(() =>{
        customer.unsubscribe();
      })
 this.unsubscribe = this.db.collection(this.collectionName).orderBy('name')
    .where("deleted","==",false)
    .onSnapshot(customerSnapshot =>{

澄清:这里的客户是提供者,而取消订阅是客户提供者中的数据成员。

注意:我不希望用户确认关闭应用程序,因此没有警报控件

另外:firebase 是否提供任何机制,通过我们可以验证订阅是否已分离。

谢谢

【问题讨论】:

  • 通常最好在lifecycle method 中取消订阅,例如ionViewWillLeaveionViewDidLeave

标签: ionic3 google-cloud-firestore


【解决方案1】:

通常最好取消订阅lifecycle method 中的数据库侦听器,例如ionViewWillLeaveionViewDidLeave。最常见的是,您会以与您订阅的方式相反的方法取消订阅。因此,如果您在 ionViewWillEnter 中附加您的听众,请在 ionViewDidLeave 中取消订阅。

一旦你调用了 unsubscribe 方法并返回,监听器就被移除了。但是无法从取消订阅方法中查看它是否已被调用,因此您必须自己跟踪。

【讨论】:

  • 首先,感谢您的回答,但我尝试使用此(发布此 Q 后),但我不确定听众是否已退订。我如何跟踪它?跨度>
  • 我不明白你的意思。在您发布的代码中,您可以在调用后将this.unsubscribe 设置为null。但是你在ionViewWillEnter订阅,在ionViewDidLeave取消订阅,这样做没什么用,因为代码已经平衡了。如果所有这些都对您没有帮助,请考虑描述您要解决的实际问题是什么,因为现在我感觉我们正在查看XY problem
  • 先生,我只是想取消订阅听众,在我发布的 Q 中,我已经表明当用户按下后退按钮退出应用程序时我尝试取消订阅,但在那种情况下按钮不起作用,而且你给的建议,我确实试过了,但我不确定,如何检查取消订阅是否成功?
  • 此时我只能重复我之前所说的:如果你调用了unsubscribe方法,并且调用返回,那么unsubscribe成功了。如果有问题,会抛出异常。
  • 抱歉再次询问,这听起来可能很愚蠢,因为我对这个完全陌生,取消订阅,所以我从你的帮助中得出的结论是,我应该把取消订阅放在一个如果可能和检查它是否返回true..?最后一件事可能听起来很傻,但如果我不取消订阅,它会影响读/写计数吗?
猜你喜欢
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 2020-07-05
  • 1970-01-01
  • 2017-04-01
  • 2018-03-22
  • 2019-08-12
相关资源
最近更新 更多