我为我的购物应用程序创建了一个Firebase函数,当创建订单时会触发该函数,然后它会检查订单中每个产品的数量并更新数据库中的产品数量。我需要这个来跟踪每种产品还剩多少件商品。然而,如果订单中的一种产品的数量超过了剩余的数量(数据库中的产品数量(,我需要一种方法让函数返回一个错误,我可以从我的react原生应用程序中捕捉到这个错误,这样我就可以通知用户他要求的数量不可用。我还需要一个函数来停止在数据库中创建订单文档。
这是我写的firebase函数:
exports.countOrderProductChange = functions.firestore.document("/orders/{id}")
.onCreate((change, context) => {
const data = change.data();
const itemsList = data["itemsList"];
let error = "";
const newProductsSizes = {};
for (const item of itemsList) {
db.collection("products").doc(item.product.id).get().then((doc) => {
const product = doc.data();
let sizes = [];
if (item.product.id in newProductsSizes) {
sizes = newProductsSizes[item.product.id];
} else {
sizes = product.sizes;
}
const remaingSize = sizes.find((size) => (size.name == item.size));
const remaingSizeQty = remaingSize.qty;
if (remaingSizeQty < item.qty) {
if (remaingSizeQty == 0) {
error = "Sorry there's no more (" + item.size +
") size of the product: " + item.product.name;
} else {
error = "Sorry there's only "+ remaingSizeQty +
" of (" + item.size +
") size of the product: " + item.product.name;
}
functions.logger.log(error);
return error;
} else {
const sizeIndex = sizes.findIndex((obj) => (obj.name == item.size));
const newQty = remaingSizeQty - item.qty;
const newSizes = sizes;
newSizes[sizeIndex].qty = newQty;
newProductsSizes[item.product.id] = newSizes;
}
});
}
for (const productId in Object.keys(newProductsSizes)) {
if (Object.prototype.isPrototypeOf.call(newProductsSizes, productId)) {
db.collection("products").doc(productId).update({
sizes: newProductsSizes[productId],
});
}
}
});
onCreate
函数,因为这种类型的函数是后台函数。如第三点所示,这些函数是从后端调用的:
当事件提供程序生成与函数条件匹配的事件时,将调用代码。
您可以查看此相关帖子以获取更多参考,其中还提到了收听用于保存操作状态的文档。
另一种选择是使用可调用函数。这些函数允许您处理客户端上的错误,并在应用程序中直接调用。