Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回承诺而不是值的函数-react native/javascript_Javascript_Reactjs_Firebase_React Native_Google Cloud Firestore - Fatal编程技术网

返回承诺而不是值的函数-react native/javascript

返回承诺而不是值的函数-react native/javascript,javascript,reactjs,firebase,react-native,google-cloud-firestore,Javascript,Reactjs,Firebase,React Native,Google Cloud Firestore,这里我有一个函数,它应该返回true或false,无论文档是否存在于集合中。查询工作正常,控制台日志中的结果实际上显示了要返回的正确布尔值 async function isClaimed(voucher, user) { var db = Firebase.firestore(); var result; await db .collection("ClaimedVoucher") .where("voucherID",

这里我有一个函数,它应该返回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”:空, }


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

您已经有了提示-异步函数将始终返回承诺。为了获得该值,您需要等待它被满足或拒绝。使用
等待
.then()


谢谢你的回复!但是,我在返回JSX的主函数中调用了“isVoucherClaimed”函数-我不能在该函数中使用wait,因为我必须将其转换为异步函数。你知道我的意思吗?我忘了提到我使用的是功能组件而不是类。@kiermcguirk您不应该在组件的根上运行异步代码-它可能应该在useEffect或事件处理程序中。无论如何,这是我在没有看到代码的情况下所能猜到的
isVoucherClaimed = await isClaimed(voucher.voucherID, uid);