Примечание: я использую реагирование js, и весь мой код находится в классе компонента реакции.
Я хочу проверить, является ли кто-то администратором, поэтому я сделал эту функцию :
makeDatabaseCall = () => {
let userDB = this.props.firestore.collection('user');
let queryUserDB = userDB.where('userIdentifier', '==', this.props.auth.uid).limit(1).get()
.then(snapshot => {
console.log(snapshot.docs[0].data().clearance)
return (
this.setState({
clearance: snapshot.docs[0].data().clearance
})
)
})
.catch(err => {
console.log('Error getting documents', err);
});
}
Но мне нужно использовать this.props.auth.uid, поэтому мне нужно дождаться загрузки аутентификации.
Я не хочу помещать это в оператор if в моем render (), потому что это сделает мой код неэффективным (он будет постоянно проверяться).
Как я могу использовать концепцию обещаний сделать асинхронный вызов firebase, посмотреть, загружен ли auth, и затем запустить вышеописанную функцию?
Также здесь мой код авторизации:
const mapStateToProps = (state) => {
return {
auth: state.firebase.auth
}
}
export default compose(
connect(mapStateToProps),
firestoreConnect([
{ collection: 'events',
collection: "user"
}
])
)(Dashboard)```