【发布时间】:2021-04-10 17:09:30
【问题描述】:
我有问题。 我需要从 firestore 获取数据,并希望将集合分配给我的变量,但该函数不会等待完成 firebase.auth,并在底部运行 console.log。也许我有异步的问题。 我应该怎么做才能退回我的收藏? 我使用函数:
async function getDaySpending(period="7-2020"){
let arrayOfSpending=[];
await firebase.auth().onAuthStateChanged( function(user) {
if (user) {
firebaseApp.firestore().collection(user.uid).doc(period).get().then(doc=>{
if(doc.exists){
arrayOfSpending=doc.data().spending; //assign value
console.log(arrayOfSpending) //return proper collection,run second
}})
}
});
console.log(arrayOfSpending); //return null,run first
return arrayOfSpending
}
编辑 我不想开始一个新的话题,因为它是相关的。 我的代码:
init()
async function init () {
await userIsActive()
console.log("in init");
await getDaySpending();
console.log("after") */
}
function userIsActive(){
firebaseApp.auth().onAuthStateChanged( user=>{
if(user){
console.log("user is active");
return true
}else{
console.log("no user");
return false
}
})
}
function getDaySpending(period = '7-2020') {
const user = firebase.auth().currentUser;
if(!user) return; //I got null instead user data
const uid = user.uid;
const snap = await firebase.firestore().collection(uid).doc(period).get();
if(snap.exists) {
return snap.data().spending;
} else {
// handle the case where there was no data
}
}
我在控制台中收到如下响应: "in init","after","null","user is active" 但我想收到如下回复: "user is active", "in init", user data instead null,"after";
我该怎么办?
【问题讨论】:
标签: javascript firebase google-cloud-firestore