Асинхронная функция работает не так, как нужно
Итак, в чем проблема, у меня есть метод:
const logIn = async (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
e.preventDefault()
await login(email.value, password.value)
if (user !== null){
setIsAuth(true)
localStorage.setItem('auth', 'true')
user.roles.includes('ADMIN') && localStorage.setItem('ADMIN', 'ADMIN')
localStorage.setItem('user_email', user.email)
setModal(false)
setInitValues()
}else {
setAreBadCredentials(true)
}
}
И метод login():
export const login = (email: string, password: string) => {
return async (dispatch: Dispatch<UserAction>) => {
try {
dispatch({type: UserActionTypes.FETCH_USER})
const response = await axios.get<IUser>('http://localhost:8080/users/login', {
params: {
email,
password
}
})
dispatch({type: UserActionTypes.FETCH_USER_SUCCESS, payload: response.data})
}catch (e) {
dispatch({
type: UserActionTypes.FETCH_USER_ERROR,
payload: 'Произошла ошибка при загрузке пользователя'
})
}
}
}
Метод login отправляет запрос на сервер и устанавливает user, который пришел из сервера. Но когда в методе logIn проводится проверка на null, user равняется null, но при этом же user сетается, как нужно. Как будто функция без await. Когда я нажимаю на кнорку еще раз, когда выполняется метод LogIn, user уже не null. В чем проблема и как исправить так, чтобы user с первой проверки не равнялся null?