返回承诺而不是值的函数-react native/javascript
这里我有一个函数,它应该返回true或false,无论文档是否存在于集合中。查询工作正常,控制台日志中的结果实际上显示了要返回的正确布尔值返回承诺而不是值的函数-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",
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);