Javascript Firebase/ReactJS-承诺无法按正确顺序工作

Javascript Firebase/ReactJS-承诺无法按正确顺序工作,javascript,reactjs,firebase,firebase-realtime-database,Javascript,Reactjs,Firebase,Firebase Realtime Database,我是一个React初学者,我正在开发一个简单的CMS应用程序。我无法按正确的顺序从Firebase接收数据。这是一个用于编辑现有帖子或添加新帖子的组件。当我打开编辑页面时,它会在getUserData之前启动getPostData函数(错误的方式-pending设置为true,没有显示任何内容),但当我刷新编辑页面时,一切正常。当添加新帖子时,它也可以正常工作。我知道Firebase是异步工作的,但在我的例子中,我需要getUserData在getPostData之前接收信息。起初我有简单的回调

我是一个React初学者,我正在开发一个简单的CMS应用程序。我无法按正确的顺序从Firebase接收数据。这是一个用于编辑现有帖子或添加新帖子的组件。当我打开编辑页面时,它会在getUserData之前启动getPostData函数(错误的方式-pending设置为true,没有显示任何内容),但当我刷新编辑页面时,一切正常。当添加新帖子时,它也可以正常工作。我知道Firebase是异步工作的,但在我的例子中,我需要getUserData在getPostData之前接收信息。起初我有简单的回调函数,然后我使用了中所说的承诺,但这也不起作用。我非常感谢你在这方面的帮助

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

setState也是异步的,您尝试过这个吗<代码>this.setState(yourUserObject,this.getPostData)。您可以发布整个组件代码吗here@TarangHirani它相当长,所以我把组件代码放在这里:对不起,我粘贴了错误的代码,这是正确的链接:@Kunukn-它工作了!!非常感谢,我不知道我可以将回调函数传递给setState。