Это связано с тем, что фактический вызов store.dispatch(fetchUser(authToken))
является синхронным - метод dispatch()
не является асинхронным , поэтому ведение журнала "show login screen" будет происходить сразу после выполнения метода fetchUser()
.
Если вы хотите, чтобы loggedInView()
выполнялось после того, как ответ был получен от вашего сетевого запроса (т. Е. Вызова асинхронного метода api.get()
), то вы можете рассмотреть возможность рефакторинга вашего кода следующим образом:
if (authToken) {
store.dispatch(fetchUser(authToken))
// Remove navigation from here
} else {
Onboarding ()
}
А потом:
export const fetchUser = authToken => async dispatch => {
console.log('dispatching auth token')
console.log('here goes request')
let res = await api.get(`/auth/${authToken}`);
if (res.ok) {
console.log('have the user')
// Occurs after network request is complete
console.log('show login screen')
// Add navigation here to go to logged in view now that request is complete
loggedInView()
dispatch(
setUser(res.data)
)
} else {
dispatch({
type: 'SET_USER_DEFAULT'
})
}
Надеюсь, это поможет!