我在Firebase Firestore中有一个称为用户的集合。集合用户中的每个文档都是在应用程序中注册的用户。每个文档都有一个称为token_ids的字段。如何遍历所有文档以获取token_ids字段中的值。我正在使用Firebase云功能来这样做。这是我尝试使用的代码片段,但没有用:
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);
});
});
答案 0 :(得分:1)
由于Firestore操作是异步的,因此理想情况下,您应该将代码包装在async-await块中。
例如:
async function fetchAllTTokenIds() {
const tokenReference = admin.firestore().collection("users");
const tokenSnapshot = await tokenReference.get();
const results = [];
// Recommendation: use for-of loops, if you intend to execute asynchronous operations in a loop.
for(const doc of tokenSnapShot) {
results.push(doc.data().token_id);
}
const tokenIds = await Promise.all(results);
}
通过这种方式,所有tokenIds
变量都将填充tokenIds
数组。
或者,您也可以并行进行所有异步调用,因为它们使用Promise.all
(Reference)彼此独立
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))
}))
在这种情况下,tokenIds
变量将包含所有tokenId的数组。
答案 1 :(得分:1)
花了我一段时间,但终于找到了解决方案。这里是。这是Dhruv Shah提出的第一个解决方案,但稍作修改:
async function fetchAllTTokenIds() {
const tokenReference = admin.firestore().collection("users");
const tokenSnapshot = await tokenReference.get();
const results = [];
tokenSnapshot.forEach(doc => {
results.push(doc.data().token_id);
});
const tokenIds = await Promise.all(results);
return console.log("Here =>" +tokenIds);
}
答案 2 :(得分:0)
代码段的结构取决于您使用的是Firebase Admin SDK,是作为在本地计算机上运行的脚本还是由客户端应用程序调用的httpsCallable
。对于第一种情况,它是这样写的:
在脚本file.js
中,初始化应用程序后,编写以下代码。
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();
使用命令node file.js
在命令行上运行此脚本,它将打印提供的输出