【问题标题】:runTransaction firebase async await return undefinedrunTransaction firebase 异步等待返回未定义
【发布时间】:2022-11-06 13:25:01
【问题描述】:

使用 FirebaseFirestoreService 我编写了这个函数来获取和更新集合“设置”

export const handleGetOrderId = async () => {
  const settingDocRef = doc(db, "restaurant", "9NmmWP99jNciAqVqLROy", "setting", "9NmmWP99jNciAqVqLROy");

  try {
    await runTransaction(db, async (transaction) => {
      const sfDoc = await transaction.get(settingDocRef);
      if (sfDoc.exists()) {
        transaction.update(settingDocRef, { orderId: increment(1) });

        if (sfDoc?.data().orderId) {
          const new_id = parseFloat(sfDoc?.data().orderId) + 1;
          return String(new_id).padStart(6, "0");
        } else {
          return "000001";
        }
      }
    });
  } catch (e) {
    console.error(e);
  }
};

在前端,我像这样调用“handleGetOrderId”

const orderId: any = await handleGetOrderId();

但它返回“未定义”,我想看到一种类型的字符串,就像 firebase 的自动生成的 ID - 我尝试了很多方法来解决,但没有任何改变。有人请告诉我我错在哪里。

【问题讨论】:

    标签: typescript firebase google-cloud-firestore async-await


    【解决方案1】:

    您没有从 handleGetOrderId() 函数返回任何内容。 runTransaction 的已解决承诺是从事务返回的数据。尝试重构代码,如下所示:

    export const handleGetOrderId = async () => {
      const settingDocRef = doc(db, "restaurant", "9NmmWP99jNciAqVqLROy", "setting", "9NmmWP99jNciAqVqLROy");
    
      try {
        const trasactionResult = await runTransaction(db, async (transaction) => {
          const sfDoc = await transaction.get(settingDocRef);
          if (sfDoc.exists()) {
            transaction.update(settingDocRef, {
              orderId: increment(1)
            });
    
            if (sfDoc?.data().orderId) {
              const new_id = parseFloat(sfDoc?.data().orderId) + 1;
              return String(new_id).padStart(6, "0");
            } else {
              return "000001";
            }
          }
        });
    
        // Add return here
        return transactionResult
      } catch (e) {
        console.error(e);
      }
    };
    

    签出文档中的passing information out of transaction 部分。

    【讨论】:

    • Dharmaraj 您的解决方案非常简单有效地解决了我的问题,真的帮助了我。非常感谢 Dharmaraj,祝你有美好的一天
    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2018-04-30
    • 2021-12-05
    相关资源
    最近更新 更多