如何让firebase函数(在创建时使用)返回一个错误,我可以从我的react原生应用程序中捕捉到这个错误



我为我的购物应用程序创建了一个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],
          });
        }
      }
});
正如Doug Stevenson所评论的,您的应用程序无法直接运行onCreate函数,因为这种类型的函数是后台函数。如第三点所示,这些函数是从后端调用的:

当事件提供程序生成与函数条件匹配的事件时,将调用代码。

您可以查看此相关帖子以获取更多参考,其中还提到了收听用于保存操作状态的文档。

另一种选择是使用可调用函数。这些函数允许您处理客户端上的错误,并在应用程序中直接调用。

相关内容

  • 没有找到相关文章

最新更新