Comment puis-je écouter un changement de champ spécifique avec firestore js sdk?
Dans la documentation, ils semblent seulement montrer comment écouter le document entier. Si un champ "SF" change, le rappel sera déclenché.
db.collection("cities").doc("SF")
.onSnapshot(function(doc) {
console.log("Current data: ", doc && doc.data());
});
Tu ne peux pas. Toutes les opérations dans Firestore sont sur un document entier.
Ceci est également vrai pour Déclencheurs Firestore de Cloud Functions (vous pouvez uniquement recevoir un document entier modifié d'une manière ou d'une autre).
Si vous devez restreindre la portée de certaines données à extraire d'un document, placez-les dans un document d'une sous-collection et interrogez-les individuellement.
Juste au cas où vous voudriez ignorer des événements dans certains champs, vous pouvez faire quelque chose comme:
export const yourCloudFunction = functions.firestore
.document('/your-path')
.onUpdate(
field('foo', 'REMOVED', (change, context) => {
console.log('Will get here only if foo was removed');
// ... Your implementation here
}),
);
J'ai créé un Gist de la fonction field
ici . Rappelez-vous, cela n'empêche pas votre fonction de s'exécuter si des modifications se produisent dans d'autres champs, elle ne vous en parlera pas et renverra une promesse résolue.
Écoutez le document, puis définissez une condition sur le champ qui vous intéresse:
firebase.firestore().collection('Dictionaries').doc('Spanish').collection('Words').doc(Word).collection('Pronunciations').doc('Castilian-female-IBM').onSnapshot(function(snapshot) {
if (snapshot.data().audioFiles) { // eliminates an error message
if (snapshot.data().audioFiles.length === 2) {
audioFilesReady++;
if (audioFilesReady === 3) {
$scope.showNextWord();
}
}
}
}, function(error) {
console.error(error);
});
J'écoute un document pour une voix (Castilian-female-IBM
), qui contient un tableau de fichiers audio aux formats webm
et mp3
. Lorsque ces deux fichiers audio sont revenus de manière asynchrone, snapshot.data().audioFiles.length === 2
. Cela incrémente un conditionnel. Lorsque deux autres voix reviennent (Castilian-male-IBM
et Latin_American-female-IBM
), alors audioFilesReady === 3
et la fonction suivante $scope.showNextWord()
se déclenchent.