Javascript Firebase:如何停止侦听快照

Javascript Firebase:如何停止侦听快照,javascript,reactjs,firebase,listener,google-cloud-firestore,Javascript,Reactjs,Firebase,Listener,Google Cloud Firestore,我有一个javascript应用程序,它使用onSnapshot侦听器来侦听firebase集合中的更改。当我不再需要听众时,医生告诉我取消订阅。在React中,我会在componentWillUnmount()中执行此操作,但是如果我在普通类中设置了侦听器(而不是React),在这种情况下,我将如何取消订阅 我是如何实现它的 class MyComponent extends React.Component { constructor() { super(); this.p

我有一个javascript应用程序,它使用onSnapshot侦听器来侦听firebase集合中的更改。当我不再需要听众时,医生告诉我取消订阅。在React中,我会在
componentWillUnmount()
中执行此操作,但是如果我在普通类中设置了侦听器(而不是React),在这种情况下,我将如何取消订阅

我是如何实现它的

class MyComponent extends React.Component {
  constructor() {
    super();
    this.presenter = new MyPresenter();
  }
  ...rest of component

class MyPresenter {
    constructor() {
      const listener = db.collection("cities")
        .onSnapshot(function () {});
    }
}

在我看来,您只需要在
MyPresenter
上创建一个名为“stop()”的方法或类似的方法,该方法用于取消订阅。然后,在您的组件中,在其
组件期间调用
presenter.stop()
将卸载()

当您不再需要更新时,您将停止侦听。考虑到目前为止的信息,不可能知道什么时候应该这样做。“你必须弄清楚这一点。@DougStevenson我已经更新了我的问题,让它更清晰了。你在应用程序生命周期的某个地方调用这个构造函数。您应该在其生命周期的相反位置调用
unsubscribe()
。抱歉说得含糊不清,但这是我现在能说的最好的了。谢谢,这很有道理。再加上一个问题,让我想一想。引用文档“这允许客户端停止使用带宽接收更新。”。如果我没有打电话取消订阅,客户端会在什么时候停止接收更新?我假设当我的标签关闭时?如果你不停止监听,那么你的应用程序将继续接收更新,只要它保持打开状态。如果关闭选项卡或刷新页面,所有上下文都将丢失,您必须再次侦听才能获得更新。