我很难从Firestore数据库返回值。 我正在尝试从数据库中返回“金额”。 设置变量时,我可以console.log'amount'。 (请参见代码) 但是当我尝试在函数末尾返回值时,它不返回任何东西。('amount'未定义no-undef) 我如何返回该值。任何帮助都会很棒。请记住,我对这个话题还很陌生。
import firebase from 'firebase/app';
import 'firebase/firestore';
import 'firebase/auth';
export default function checkAmount() {
let user = firebase.auth().currentUser;
if (user) {
let userUID = user.uid
let docRef = firebase.firestore().collection("users").doc(userUID);
docRef.get().then((doc) => {
if (doc.exists) {
let amount = doc.data().amount;
if (amount > 0){
console.log(amount) /// This does work
}
} else {
console.log("No such document!");
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
}
return amount /// This **does not** return anything . How do i return the amount?
}
答案 0 :(得分:0)
原因是因为get()
方法是异步的:它立即返回一个承诺,并在以后的一段时间内用查询结果解析 some 。 get()
方法不会阻塞该函数(如上所述,它会立即返回):这就是为什么最后一行(return amount
)在异步工作完成之前执行,但是具有不确定的值。 / p>
您可以详细了解here和异步JavaScript方法,以及here了解为什么Firebase API是异步的。
因此,您需要等待get()
返回的承诺得到解析,并使用Alex提到的then()
方法来接收查询结果并发送响应。
以下将起作用:
export default function checkAmount() {
let user = firebase.auth().currentUser;
if (user) {
let userUID = user.uid
let docRef = firebase.firestore().collection("users").doc(userUID);
return docRef.get().then((doc) => { //Note the return here
if (doc.exists) {
let amount = doc.data().amount;
if (amount > 0){
console.log(amount) /// This does work
return true; //Note the return here
}
} else {
console.log("No such document!");
//Handle this situation the way you want! E.g. return false or throw an error
return false;
}
}).catch(error => {
console.log("Error getting document:", error);
//Handle this situation the way you want
});
} else {
//Handle this situation the way you want
}
}
但是您需要注意,您的功能现在也异步了。因此,您应按以下方式调用它:
checkAmount().
then(result => {
//Do whatever you want with the result value
console.log(result);
})