Cloud Firestore работает нормально с .get (), но не с .onSnapshot () с использованием next.js

1

У меня возникли проблемы, которые я не очень хорошо понимаю, играя с next.js и Firebase Cloud Firestore, но в основном это работает:

export async function fetchBroadcasts() {
  const db = await loadDB();
  const firestore = db.firestore();
  const settings = { timestampsInSnapshots: true };
  firestore.settings(settings);

  return await firestore.collection('broadcasts').doc('message').get().then(doc => ({ broadcast: doc.data() }));
}

и это не так:

export async function fetchBroadcasts() {
  const db = await loadDB();
  const firestore = db.firestore();
  const settings = { timestampsInSnapshots: true };
  firestore.settings(settings);

  return await firestore.collection('broadcasts').doc('message').onSnapshot(doc => ({ broadcast: doc.data() }));
}

Я не могу понять, почему второй вариант не работает, так как я в основном следую документации.

На моей странице index.js меня есть это:

static async getInitialProps() {
    return fetchBroadcasts();
}
Теги:
firebase
google-cloud-firestore
next.js

1 ответ

0

onSnapshot не возвращает обещание, поэтому вы не можете его await. Как видно из связанных документов API, он возвращает функцию, которую вы вызываете, когда хотите остановить только что добавленный прослушиватель.

Вы используете onSnapshot когда хотите настроить постоянный прослушиватель для документа, который постоянно получает изменения в этом документе. Вы используете get когда хотите получить единый снимок этого документа.

  • 0
    да, но как мне тогда заполнить мои реквизиты на getInitialProps используя onSnapshot ?
  • 0
    Зачем вам нужно использовать onSnapshot? Я полагаю, что вы не должны, если вы просто хотите получить данные один раз.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню