Firebase / ReactJS-承诺不能以正确的顺序工作

时间:2018-09-03 16:58:31

标签: javascript reactjs firebase firebase-realtime-database

我是一名React初学者,并且正在开发一个简单的CMS应用程序。我在以正确的顺序从Firebase接收数据时遇到问题。这是用于编辑现有帖子或添加新帖子的组件。当我打开编辑页面时,它会在getUserData之前启动getPostData函数(错误的方式-待处理设置为true,什么都不会显示),但是当我刷新编辑页面时,一切正常。在添加新帖子时也可以。我了解Firebase是异步工作的,但就我而言,我需要getUserData才能在getPostData之前接收信息。刚开始我有简单的回调函数,然后我使用了Firebase Blog中所说的promises,但这也不起作用。非常感谢您的帮助。

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());
};

0 个答案:

没有答案