javascript 无法在nextjs pwa中从firebase v9启用IndexedDbPersistence

uqcuzwp8  于 2022-11-27  发布在  Java
关注(0)|答案(1)|浏览(135)

我不能在下一个密码中使用firebase v9 enableIndexedDbPersistence。
这是错误
index. js//防火墙主目录

import { initializeApp } from 'firebase/app'
import { getAuth } from 'firebase/auth'
import { getFirestore } from 'firebase/firestore'
import { getStorage } from 'firebase/storage'

const firebaseConfig =
  process.env.NEXT_PUBLIC_FIREBASE_CONFIG

const app = initializeApp(JSON.parse(firebaseConfig))
export const db = getFirestore(app)

// enableIndexedDbPersistence(db) //   >>>  if put here it said can't be invoked after getFirestore or any other funtion

export const auth = getAuth(app)
export const storage = getStorage(app)

那么,我应该在哪里调用

bvjxkvbb

bvjxkvbb1#

必须先调用enableIndexedDbPersistence(db)函数。在其文档中:
必须在调用任何其他函数({@link initializeFirestore}、{@link(getFirestore:1)}或{@link clearIndexedDbPersistence}除外)之前调用。
所以getFirestore(app)实际上不受此限制,与您在代码片段的注解中所陈述的相反:
//〉〉〉如果放在这里,表示不能在getFirestore或任何其他函数之后调用
因此,我猜测您可能会在enableIndexedDbPersistence(db)的承诺完成之前使用导出的db。您可以用不同的方法解决这个问题,例如将其 Package 在服务或方法中,并确保您是await-ing承诺,或者通常更改您的应用,使其不立即使用db
在我的Ionic PWA应用程序中,我成功地使用了以下内容:

import { getFirestore, enableIndexedDbPersistence } from "firebase/firestore";
import { initializeApp } from "firebase/app";

const firebaseConfig = {
  // ...
};

const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);

enableIndexedDbPersistence(db)
    .then(() => console.log("Enabled offline persistence"))
    .catch((error) => {
      if (error.code == "failed-precondition") {
        // Multiple tabs open, persistence can only be enabled
        // in one tab at a a time.
        // ...
      } else if (error.code == "unimplemented") {
        // The current browser does not support all of the
        // features required to enable persistence
        // ...
      }
    });

这确实和你的剪切非常相似。但是第一次访问Firestore是在通过用户交互之后发生的,而不是马上。

相关问题