Cela marche:
db.collection('users').doc('id').get()
.then((docSnapshot) => {
if (docSnapshot.exists) {
db.collection('users').doc('id')
.onSnapshot((doc) => {
// do stuff with the data
});
}
});
... mais cela semble verbeux. J'ai essayé doc.exists, mais cela n'a pas fonctionné. Je veux juste vérifier si le document existe avant de m'abonner aux mises à jour en temps réel. Ce get initial semble être un appel à la db.
Y a-t-il un meilleur moyen?
Votre approche initiale est correcte, mais il peut être moins détaillé d’attribuer la référence du document à une variable comme ceci:
const usersRef = db.collection('users').doc('id')
usersRef.get()
.then((docSnapshot) => {
if (docSnapshot.exists) {
usersRef.onSnapshot((doc) => {
// do stuff with the data
});
} else {
usersRef.set({...}) // create the document
}
});
Référence: Obtenir un document
Si vous utilisez Angular, vous pouvez utiliser le paquet AngularFire pour le vérifier avec un observable.
import { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/firestore';
constructor(private db: AngularFirestore) {
const ref: AngularFirestoreDocument<any> = db.doc(`users/id`);
ref.get().subscribe(snap => {
if (snap.exists) {
// ...
}
});
}