Как я могу использовать обещание, чтобы увидеть, загружена ли авторизация firebase? - PullRequest
0 голосов
/ 29 февраля 2020

Примечание: я использую реагирование 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)```

1 Ответ

0 голосов
/ 29 февраля 2020

Это на самом деле не та стратегия, которую вы хотите использовать. Вы должны использовать слушатель состояния авторизации , как описано в документации , чтобы получать обратный вызов всякий раз, когда пользователь входит в систему или выходит из нее. Вы можете использовать этот обратный вызов, чтобы точно определить, когда пользователь вошел в систему, и получить UID для использования в вашем запросе. Вы, вероятно, не хотите пытаться преобразовать это в обещание, потому что вы не получаете никакой гарантии, когда пользователь действительно выполняет это действие в вашем приложении. Ваш слушатель должен запускать любые запросы (или отправлять другие сигналы, используя любые используемые вами платформы, например, Rx JS), когда пользователь входит в систему.

...