我正在开发一个 Firestore 数据库,想要计算一个名为“图像”的集合中的文档数量,然后将该值分配给跟踪集合中的另一个文档。该函数打印尺寸,但不会更新“跟踪”集合。
/* eslint-disable require-jsdoc */
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const firestore = admin.firestore();
exports.trackPortfolioImages = functions.https.onRequest(async (req, res) => {
let count = 0;
const trackingDocRef = firestore.collection("tracking").doc("imageTracking");
try {
admin
.firestore()
.collection(`images`)
.get()
.then((querySnapshot) => {
console.log(querySnapshot.size);
count = querySnapshot.size;
// return null;
trackingDocRef.update({
imagesPortfolio: count,
});
});
console.log("Completed Portfolio count");
} catch (error) {
console.log(error);
}
res.send("hello");
});
您忽略了
trackingDocRef.update
返回的承诺,这意味着该函数可能会在该承诺解决之前终止。 您的代码需要等到所有承诺完成后才终止。 您应该阅读有关此内容的文档。
此外,您不必要在另一个 Promise 中使用
then
作为 async
函数。 这也是没有必要的。 如果您要编写异步函数,则在其中的任何 Promise 上使用 await
会更具可读性,以确保工作在函数终止之前完成。
exports.trackPortfolioImages = functions.https.onRequest(async (req, res) => {
let count = 0;
const trackingDocRef = firestore.collection("tracking").doc("imageTracking");
const querySnapshot = await admin
.firestore()
.collection(`images`)
.get()
console.log(querySnapshot.size);
count = querySnapshot.size;
await trackingDocRef.update({
imagesPortfolio: count,
});
console.log("Completed Portfolio count");
res.send("hello");
});