http 函数无法更新文档

问题描述 投票:0回答:1

我正在开发一个 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");
});

enter image description here

javascript firebase google-cloud-firestore google-cloud-functions
1个回答
0
投票

您忽略了

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");
});
© www.soinside.com 2019 - 2024. All rights reserved.