【问题标题】:Firebase Firestore - View Realtime Listeners & Unsubscribe Listeners on JavaScript Client SDKFirebase Firestore - 在 JavaScript 客户端 SDK 上查看实时侦听器和取消订阅侦听器
【发布时间】:2018-08-18 01:53:45
【问题描述】:

您如何查看浏览器/客户端上的活动实时侦听器? Handle listen errors 文档说明

发生错误后,监听器将不再接收任何事件

但我只是想验证/验证我的侦听器在某些事件之后是否取消订阅。

这是我的代码 sn-p。我的用户文档中有一个cart 字段,它存储了一个orderId 指向一个单独的orders 集合中的文档。登录时,我想在我的users 集合中收听返回的user.uid 文档。如果他们的购物车中有订单(例如cart: h4the-cart-uid-7rhksjn),我想听那个特定的订单 - 如果没有(例如null"",请分离该订单上的所有听众(我的问题的症结,老orderId 不见了)。我的问题是取消订阅侦听器,这样我就不会抛出 insufficient privilege / not authorized 错误,因为在用户清空购物车或用户退出后,侦听器仍然处于活动状态。

如果我可以对父集合说unsubscribe,那就太好了...

var userDocListener;
var orderDocListener;
firebase.auth().onAuthStateChanged(function (user) {
  if (user) {
    userDocListener = function(){
      return firebase.firestore().collection("users").doc(user.uid).onSnapshot(function (userDoc) {
        if(userDoc.exists){
          if(userDoc.data().cart == null || !userDoc.data().cart){
            //user cart empty HOW TO UNSUBSCRIBE W/O THE ORDER ID?
            cartBadgeDisplayHandler();
            if(window.location.pathname === "/account" || window.location.pathname === "account"){
              accountPageCartTabOrderNoOrderView();
            }
            orderDocListener();
          } else {
            orderDocListener = function () {
              return firebase.firestore().collection("orders").doc(userDoc.data().cart).onSnapshot(function (orderDoc) {
                cartBadgeDisplayHandler(orderDoc);
              });
            }
            orderDocListener();
          }
        }
      });
    }
    userDocListener();
  } else {
    // no user HOW TO UNSUBSCRIBE W/O THE USER UID?
    userDocListener();
  }
});

【问题讨论】:

  • 在下面回答,但这听起来像XY problem。如果您更准确地解释您想要完成/解决的问题,我们可能会提供更好的帮助。

标签: firebase google-cloud-firestore


【解决方案1】:

没有列出活动侦听器的 API。如果您需要这样的列表,您需要自己跟踪。

【讨论】:

  • 我的问题归结为将变量传递给.onSnapshot 侦听器。该文档表明您基本上使用函数表达式,例如var myDocListener = fireb..doc(myVar).onSnapshot。您调用该函数一次以启用它,再次调用它以禁用它。所以,我正在解决如何做到这一点......
  • 如果您在使用特定代码时遇到问题,请编辑您的问题以在您的问题中包含该特定代码。这将使任何人都更容易看到您在做什么,以及您可能出错的地方(或可能需要下一步)。
猜你喜欢
  • 2020-07-05
  • 1970-01-01
  • 2021-03-16
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2017-02-22
相关资源
最近更新 更多