У меня возникли проблемы, которые я не очень хорошо понимаю, играя с 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();
}
onSnapshot
не возвращает обещание, поэтому вы не можете его await
. Как видно из связанных документов API, он возвращает функцию, которую вы вызываете, когда хотите остановить только что добавленный прослушиватель.
Вы используете onSnapshot
когда хотите настроить постоянный прослушиватель для документа, который постоянно получает изменения в этом документе. Вы используете get
когда хотите получить единый снимок этого документа.
getInitialProps
используяonSnapshot
?