页面刷新时未触发 Firestore onSnapshot 取消订阅

问题描述 投票:0回答:1

我遇到了 Firestore 的 onSnapshot 侦听器在页面刷新或关闭时无法取消订阅的问题。我正在使用 Angular 和 Firestore SDK,并且我已经在 beforeunload 事件中实现了取消订阅逻辑。然而,Firestore 提供的取消订阅功能似乎并不总是执行,Firestore 模拟器和 chrome 网络监控中的请求日志不一致就证明了这一点。即使确实如此,我在模拟器日志中也看不到“ListenHandler onClose”。取消订阅不起作用也很明显,因为每次刷新时 Firestore 文档中的单个更改都会触发成倍的请求。 直接调用取消订阅(每个示例在用户注销时)调用取消订阅时,不会重现此问题

@HostListener('window:beforeunload', ['$event'])
unloadHandler(event: Event) {
  this.unsubscribeFromFirestore();
}

ngOnDestroy() {
  this.unsubscribeFromFirestore();
}

unsubscribeFromFirestore() {
  if (this.unsubscribe) {
    console.log('Unsubscribing from Firestore');
    this.unsubscribe(); // Directly call the unsubscribe function
  }
}

问题:如何确保在页面刷新或关闭期间可靠地调用 Firestore onSnapshot 取消订阅函数?是否有任何最佳实践或替代方法可以有效处理这种情况?

javascript angular firebase google-cloud-firestore
1个回答
0
投票

根据 MDN 文档

beforeunload 事件未可靠触发,尤其是在移动平台上。

特别是:在这种情况下你无法再可靠地进行网络调用。

但是这里无论如何都不需要整个取消订阅逻辑。当页面卸载时,侦听器会自动取消注册 - 因为服务器将无法再向它们传递消息。

© www.soinside.com 2019 - 2024. All rights reserved.