我正在使用 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是...
要么有错误的改变,要么没有改变。
我的功能出了什么问题?
我没有测试您的云功能,但您没有正确管理其生命周期。以下应该可以解决问题。
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
),
});
});