Асинхронная функция работает не так, как нужно

Итак, в чем проблема, у меня есть метод:

    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?


Ответы (0 шт):