Cloud Firestore работает нормально с .get (), но не с .onSnapshot () с использованием next.js - PullRequest
0 голосов
/ 09 января 2019

У меня проблемы с тем, что я не очень хорошо понимаю, играя с 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();
}

1 Ответ

0 голосов
/ 09 января 2019

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

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

...