javascript - 函数返回承诺而不是值 - 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 的新手。
解决方案
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);
推荐阅读
- php - 如何使用 php cURL 从 url 下载 pdf?
- ag-grid - 类型“IFilterComp”上不存在属性“resetFilterValues”
- deployment - 使用 Airflow 实现零停机部署
- php - sendinblue 未连接到 API
- bash - 如何去混淆这个 shell 脚本?
- java - 如何解决alertdialog中代码EditText将空白值存储到textview中的问题
- c# - 以 Windows 登录用户身份从服务启动进程
- python - 合并两个字典列表
- asp.net - 使用 Rider 在 linux 上调试 ASP.NET Web API 2
- javafx - Raspberry Pi4 上的 Oracle JRE-8