J'ai une collection appelée utilisateurs à Firebase Fireestore. Chaque document de l'utilisateur de la collection est un utilisateur enregistré dans l'application. Chaque document a un champ appelé Token_ids. Comment puis-je faire boucler tous les documents pour obtenir les valeurs dans le champ Token_ids. J'utilise des fonctions de cloud Firebase pour le faire. Voici l'extrait de code que j'ai essayé d'utiliser, mais cela n'a pas fonctionné:
const functions = require('firebase-functions'); const admin = require ('firebase-admin'); admin.initializeApp(); //fetch all token ids of users const tokenReference = admin.firestore().collection("users"); const tokenSnapshot = await tokenReference.get(); tokenSnapshot.forEach((doc) =>{ console.log("Token ids are:" + doc.data().token_id); }); });
3 Réponses :
Étant donné que les opérations de Firestore sont asynchrones, vous devez idéalement envelopper votre code dans un bloc ASYNC-Await.
Par exemple: p> de cette manière tout le Alternativement, vous pouvez également rendre tous les appels asynchrones en parallèle car ils sont indépendants de l'autre. Tokenids code> variable sera rempli avec un tableau de
Tokenids code>. p>
promess.all code> ( Référence ) P>
async function fetchAllTTokenIds() {
const tokenReference = admin.firestore().collection("users");
const tokenSnapshot = await tokenReference.get();
const tokenIds = await Promise.all(tokenSnapShot.map(doc => {
return doc.data()
.then(data => (data.token_id))
}))
J'ai essayé la première réponse. Il a donné l'erreur suivante: inattendu attendre code> à l'intérieur d'une boucle
Cela semble être une erreur code> lint code>. Cependant, j'ai mis à jour ma réponse et supprimé l'attente de la boucle.
La deuxième solution a donné l'erreur suivante aux journaux de fonctions Cloud: TypeError: Tokensnapshot.Map n'est pas une fonction
Après la mise à jour, j'ai dirigé le code, mais cela a donné cette erreur TypeError: Tokensnapshot n'est pas démarré, dans les journaux du cloud Firestore.
Comment l'extrait de code sera structuré dépend si vous utilisez l'administrateur Firebase Admin SDK, que ce soit comme un script couru sur votre machine locale ou un dans votre script httpscalable code> appelé par une application cliente. Pour le premier cas, il est écrit comme ceci:
file.js code>, après l'initialisation de l'application, écrivez le code suivant. P>
exports.test_f = async function() {
try {
const tokenReference = admin.firestore().collection("users");
const tokenSnapshot = await tokenReference.get();
tokenSnapshot.forEach((doc) =>{
console.log("Token ids are:" + doc.data().token_id);
});
} catch (error) {
console.log(error);
}
}
exports.test_f();
m'a pris un moment, mais j'ai finalement trouvé la solution à elle. C'est ici. C'est la première solution donnée par Dhruv Shah mais légèrement modifié:
Si vous avez trouvé la solution, veuillez envisager d'accepter votre propre réponse.
Je ne vois pas le code complet que vous avez essayé.
Pourriez-vous élaborer quelle est votre définition de «ne fonctionne pas», quel est votre comportement attendu, quel est votre comportement actuel et comment exécutez-vous votre script?