У меня есть функция, которая загружает пользовательские данные из базы данных Firebase в реальном времени. Функция вызывает действие, которое загружает данные на главном экране загрузки (в componentDidMount
). Проблема в том, что страница загрузки переходит на главный экран перед загрузкой (выборка данных из базы данных и диспетчеризация).
Функции, вызываемые в начале работы приложения:
async componentDidMount(){
....
if (facebookToken !== null){
await this.props.loadData();
this.props.navigation.navigate("MainScreen");
....
}
и вызываемое действие:
export const loadData = () => async dispatch => {
firebase.auth().onAuthStateChanged((user) => {
dispatch({ type: SAVE_USER, payload: {prop: "uid", value: user.uid}});
firebase.database().ref(`/users/${user.uid}`)
.once('value', snapshot => {
dispatch({type: UPDATE_CREDENTIALS, payload: { prop: "phone", value: snapshot.val().phone}});
dispatch({type: UPDATE_CREDENTIALS, payload: { prop: "country", value: snapshot.val().country}});
dispatch({ type: SAVE_USER, payload: {prop: "name", value: snapshot.val().name}});
dispatch({ type: SAVE_USER, payload: {prop: "fbPicture", value: snapshot.val().photo}});
})
}
});
...
}
Кажется, я не могу найти решение, которое работает так, чтобы вызов данных выполнялся до того, как он продолжит переходить к MainScreen