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