Firebase / ReactJS - обещания не работают в правильном порядке - PullRequest
0 голосов
/ 03 сентября 2018

Я новичок в React и работаю над простым приложением CMS. У меня проблема с получением данных от Firebase в правильном порядке. Это компонент для редактирования существующего сообщения или добавления нового. Когда я открываю страницу редактирования, она запускает функцию getPostData перед getUserData (неправильный путь - значение pending установлено в true, и ничего не отображается), но когда я обновляю страницу редактирования, все работает нормально. Также все работает нормально при добавлении нового поста. Я понимаю, что Firebase работает асинхронно, но в моем случае мне нужен getUserData для получения информации перед getPostData. Сначала у меня были простые функции обратного вызова, затем я использовал обещания, как сказано в Firebase Blog , но это тоже не сработало. Буду очень признателен за вашу помощь с этим.

componentDidMount() {
this.getUserData();
}

getPostData = () => {

if (this.props.match.params.id) {

    return firebase.database()
        .ref('/posts/' + this.props.match.params.id)
        .once('value', (snapshot) => {

            const val = snapshot.val();

            this.setState({
                post: val ? val : this.state.post,
                postId: this.props.match.params.id,
                pending: false,
            });
        })
    }
};


getUserData = () => {
const user = firebase.auth().currentUser;

firebase.database().ref('users/' + user.uid).once('value')
    .then(snapshot => {
        this.setState({
            post: {
                username: snapshot.val().username,
                language: snapshot.val().defaultlang,
                uid: user.uid
                //other stuff
            },
            pending: this.props.match.params.id ? true : false
        });
    })
    .then(this.getPostData());
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...