我正在跟踪Firebase提供的official documentation,以使用get
关键字检索数据。
我有一个应该在查询完成后返回某些内容的函数。问题是我的函数没有等待Firebase完全获取信息,而是返回null。代码如下:
角色界面:
interface Role {
standard?: boolean,
premium?: boolean,
}
customerRole函数:
customerRole(): Role {
let customerRole: Role = null;
this.db.collection('customer').doc(customer.uid).get().then(doc => {
console.log('Two');
if (doc.exists) {
console.log('Three - doc is: ', doc.data().role);
customerRole = doc.data().role;
console.log('Four');
} else {//doc.data() doesn't exist
console.log('No such document!');
console.log('Five');
}
console.log('Six');
});
console.log('Seven');
return customerRole; //always null since the firebase query hasn't finished yet.
}
这将产生以下输出:
一个
七个
此客户的角色是
null
// //来自以下功能 致电customerRole()两个
三个-文档为:{standard:true}
四个
六个
我必须返回一个Role
对象(这是必须的!),所以我不能使用async
/ await
,因为它必须返回一个承诺。我尝试像这样async
/ await
:
customerRole(): Role {
let customerRole: Role = null;
this.db.collection('customer').doc(customer.uid).get().then(async doc => {
console.log('Two');
if (doc.exists) {
console.log('Three - doc is: ', await doc.data().role);
customerRole = await doc.data().role;
console.log('Four');
} else {//doc.data() doesn't exist
console.log('No such document!');
console.log('Five');
}
console.log('Six');
});
console.log('Seven');
return customerRole; //always null since the firebase query hasn't finished yet.
}
但是问题仍然存在。