Firebase Firestore-在JavaScript客户端SDK上查看实时侦听器和取消订阅侦听器

时间:2018-08-18 01:53:45

标签: firebase google-cloud-firestore

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

  

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

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

这是我的代码段。我的用户文档中有一个cart字段,它在单独的orderId集合中存储着指向文档的orders。登录时,我想收听我的user.uid集合中返回的users文档。如果他们的购物车中有订单(例如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();
  }
});

1 个答案:

答案 0 :(得分:0)

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