Firebase onCreate 云功能不起作用

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

我正在使用 React 和 Firebase。我有一个简单的云功能无法执行。我正在向我的网站添加评论,我希望云功能添加有关评论的跟踪信息,例如总体评论数量、用户个人资料和整个应用程序的未发布评论。

这是我的代码:

exports.onCreateReview = functions.firestore
  .document(`reviews/{document}`)
  .onCreate(async (snapshot) => {
    const review = snapshot.data();

    //  overall reviews directory
    const trackingDocRef = firestore
      .collection("tracking")
      .doc("reviewTracking");

    //  user directory
    const profileDocRef = firestore.collection("profiles").doc(review.proID);

    trackingDocRef.update({
      reviewsAll: admin.firestore.FieldValue.increment(1),
      reviewsUnpublishedNo: admin.firestore.FieldValue.increment(1),
      reviewsUnpublishedRating: admin.firestore.FieldValue.increment(
        review.ratingOverall
      ),
    });

    profileDocRef.update({
      reviewsAll: admin.firestore.FieldValue.increment(1),
      reviewsUnpublishedNo: admin.firestore.FieldValue.increment(1),
      reviewsUnpublishedRating: admin.firestore.FieldValue.increment(
        review.ratingOverall
      ),
    });
  });

创建评论后,该函数会执行,并且评论跟踪文档会根据该函数暂时更改(更改为错误的值 - 不是增加而是减少),但随后又变回零。

当我检查云日志记录时,这是一个带有

severity: "DEBUG"
的错误图像,但没有其他有用的东西。 日志条目要点:

“reviews-onCreateReview”函数在 “us-central1”区域。该函数需要 1451 毫秒才能完成。 该函数以“ok”状态完成。该函数的运行时版本是“nodejs20...”。 函数的执行ID是...

要么有错误的改变,要么没有改变。

我的功能出了什么问题?

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

我没有测试您的云功能,但您没有正确管理其生命周期。以下应该可以解决问题。

exports.onCreateReview = functions.firestore
  .document(`reviews/{document}`)
  .onCreate(async (snapshot) => {
    const review = snapshot.data();

    //  overall reviews directory
    const trackingDocRef = firestore
      .collection("tracking")
      .doc("reviewTracking");

    //  user directory
    const profileDocRef = firestore.collection("profiles").doc(review.proID);

    await trackingDocRef.update({  // <=== See await here
      reviewsAll: admin.firestore.FieldValue.increment(1),
      reviewsUnpublishedNo: admin.firestore.FieldValue.increment(1),
      reviewsUnpublishedRating: admin.firestore.FieldValue.increment(
        review.ratingOverall
      ),
    });

    return profileDocRef.update({  // <=== See return here
      reviewsAll: admin.firestore.FieldValue.increment(1),
      reviewsUnpublishedNo: admin.firestore.FieldValue.increment(1),
      reviewsUnpublishedRating: admin.firestore.FieldValue.increment(
        review.ratingOverall
      ),
    });
  });
© www.soinside.com 2019 - 2024. All rights reserved.