首页 > 解决方案 > 函数返回承诺而不是值 - react-native / javascript

问题描述

在这里,我有一个函数,无论文档是否存在于集合中,它都应该返回 true 或 false。查询工作正常,控制台日志中的结果实际上显示了要返回的正确布尔值。

async function isClaimed(voucher, user) {
  var db = Firebase.firestore();
  var result;
  
  await db
    .collection("ClaimedVoucher")
    .where("voucherID", "==", voucher)
    .where("userID", "==", user)
    .get()
    .then(function (querySnapshot) {
      if (querySnapshot.empty === false) {
        result = true;
      } else {
        result = false;
      }
    })
    .catch(function (error) {
      console.log("Error getting documents: ", error);
    }); 
  console.log(result, "this is result");
  return result;
}

但是,当我控制台记录返回的内容(在函数之外)时,它是承诺,而不是布尔值:

isVoucherClaimed = isClaimed(voucher.voucherID, uid);
          console.log(isVoucherClaimed);

显示:

承诺{“_40”:0,“_55”:空,“_65”:0,“_72”:空,}

我读过异步函数总是返回承诺,但是如果我删除异步/等待,那么“结果”变量总是未定义的,即使在函数内部也是如此。任何帮助将不胜感激 - 我是 react-native / javascript 的新手。

标签: javascriptreactjsfirebasereact-nativegoogle-cloud-firestore

解决方案


You already have a hint - async functions will always return a promise. In order to get the value, you need to wait for it to get fulfilled or rejected. Either use await or .then().

isVoucherClaimed = await isClaimed(voucher.voucherID, uid);

推荐阅读