【发布时间】: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