【问题标题】:Firestore snapshot not updating properlyFirestore 快照未正确更新
【发布时间】:2019-09-21 22:06:03
【问题描述】:

我想知道如果该函数再次运行,是否会刷新 Firestore 文档快照。

在这里,我试图读取返回布尔值的“活动”属性。

不幸的是,如果我手动将文档中的值更改为“false”,读数仍然显示“true”,即使在重新加载(并且应该重新运行该函数)之后也是如此。

// Check if user is logged in
auth.onAuthStateChanged(user => {
    if (user) {
        findSubscription(user);
    } else {
        console.log('logged out')
    }
})

const findSubscription = (user) => {

    // Get document
    db.collection('stripe_customers')
        .doc(user.uid)
        .collection('subscription_info')
        .doc('subscription_object')
        .get()
        .then((doc) => {

            // Get number of keys in document
            const numberOfKeys = Object.keys(doc.data()).length;

            // Check if numverOfKeys is > 0 (it is not if the user has never had a subscription before)
            if (numberOfKeys !== 0) {

                // Get subscription status
                const subscriptionStatus = doc.data().subscription.plan.active;
                console.log(subscriptionStatus);

有时我会收到以下控制台日志。

“由于访问控制检查,XMLHttpRequest 无法加载('google api url')。”

我的数据库仍处于公共模式进行测试,所以我不太确定这是怎么回事。

【问题讨论】:

  • “即使在重新加载后”是什么意思?您正在刷新整个页面,但仍在获取旧数据?

标签: javascript firebase google-cloud-firestore


【解决方案1】:

您需要拨打onSnapshot() 而不是get() (https://firebase.google.com/docs/firestore/query-data/listen)

let unsubscribe = null;

const addSubscription = (user) => {
    // Subscribe to document updates 
    // (called immediately & every subsequent change) 
    unsubscribe = db.collection('stripe_customers')
        .doc(user.uid)
        .collection('subscription_info')
        .doc('subscription_object')
        .onSnapshot((doc) => { ... })
}

【讨论】:

  • 理解:为什么get()函数在页面刷新时再次运行后不显示更新的值?
  • @Max - 抱歉,我以为您的意思是从 Firebase 控制台更新。您正在刷新包含此代码的页面?在 JS 中,离线缓存默认是禁用的,所以这让我和你一样惊讶。也许 CodingDoug 会回答!
  • 对,代码在页面上,我希望它在页面重新加载时重新运行。一些附加信息:有时我收到“由于访问控制检查,XMLHttpRequest 无法加载('google api url')。”我的数据库仍处于公共模式进行测试,所以我不太确定这是怎么回事。
  • 这似乎很相关!我可以看到你不是唯一一个:stackoverflow.com/questions/47830224/…stackoverflow.com/questions/51843086/… - 遗憾的是,两者都没有答案,我不知道:/我建议你更新你的问题以注意这个问题。
猜你喜欢
  • 2021-09-02
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
相关资源
最近更新 更多