javascript - firestore取消订阅完成事件

标签 javascript google-cloud-platform google-cloud-firestore

我订阅了 firestore 中的文档,在注销之前我想取消订阅,否则会抛出错误,因为我正在使用 firestore 安全规则,并且当用户注销并且我没有取消订阅时,访问将被拒绝它会抛出一个错误。

我尝试了下面的代码,但仍然不起作用,我仍然从 firestore 安全规则中收到错误,所以我引入了 setInterval 但它花费了太多时间(在我的测试中,我已经花了 5 秒才能避免错误)

您是否有更好的方法来避免此问题,我的意思是,一旦取消订阅完成,是否会触发一个事件(我想避免长时间使用 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)
  )
};

最佳答案

据我所知,取消订阅是同步的。因此,当 unsubscribe() 完成后,您可以注销:

unsubscribe();
firebase.auth().signOut().then(() => {
    // Redirect to home page
});

如果此后您仍然收到安全错误,则您可能仍然为该用户附加了另一个监听器。如果情况并非如此,请编辑您的问题以包含 minimal, complete/standalone code that we can run to reproduce the problem 。或者,您(也)可以在 jsbin 等网站上设置问题的最小重现。

关于javascript - firestore取消订阅完成事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58305550/

相关文章:

google-cloud-platform - stackdriver 请求包含无效参数

python - 引用 Python 文件本地的文件

swift - Firestore - UITableViewCell 内的 UISlider

firebase - 如何通过 Flutter 在 Firestore 中添加 Geopoint、时间戳和对文档的引用

javascript - jQuery 代理函数和事件

javascript - 如何通过参数添加对象属性?

javascript - OnCreate 函数未触发,但 OnWrite 函数触发

javascript - 如何知道文本正在使用 javascript 或 jquery 中断

javascript - 使用 php sdk 显示 Facebook 登录按钮

javascript - 如何访问我的 Google Play 开发者帐户中的存储桶?