我在firestore中订阅了文档,在注销之前我想取消订阅,否则它将抛出错误,因为我使用的是firestore安全规则,并且当用户注销并且我没有取消订阅时,访问将被拒绝它将引发错误。
我尝试了下面的代码,但仍然无法正常工作,我仍然从firestore安全规则中收到错误消息,因此我引入了setInterval,但是这花费了太多时间(在我的测试中,我花了5秒钟才能够避免该错误)< / p>
您是否有更好的方法来避免此问题,我的意思是取消订阅完成后会触发一个事件(我想长时间避免setInterval)?
var unsubscribe = db.collection('notifications').doc('docID').onSnapshot(
function(doc) {
// Do things
})
function logout () {
unsubscribe(
setTimeout(function() {
firebase.auth().signOut().then(() => {
// Redirect to home page
});
}, 600)
)
};
答案 0 :(得分:3)
据我所知,退订是同步的。因此,unsubscribe()
完成后,您可以注销:
unsubscribe();
firebase.auth().signOut().then(() => {
// Redirect to home page
});
如果在此之后仍然出现安全错误,则可能仍为该用户附加了另一个侦听器。如果情况并非如此,请编辑您的问题以包含minimal, complete/standalone code that we can run to reproduce the problem。另外,您也可以在jsbin这样的网站上对问题进行最小化设置。