函数返回承诺而不是值 - react-native / javascript
2020-07-30
6705
这里我有一个函数,无论文档是否存在于集合中,它都应该返回 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”:null, “_65”:0, “_72”:null,
我读到异步函数总是返回承诺,但是如果我删除 async/await,那么“result”变量始终未定义,即使在函数内部也是如此。任何帮助都将不胜感激 - 我是 react-native / javascript 的新手。
1个回答
您已经得到提示 - 异步函数将始终返回一个承诺。为了获取值,您需要等待它得到履行或拒绝。使用
await
或
.then()
。
isVoucherClaimed = await isClaimed(voucher.voucherID, uid);
nip
2020-07-30