我是一名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());
};