Я новичок в 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());
};