поймать не работает JavaScript - PullRequest
1 голос
/ 09 июля 2019

У меня есть функция асинхронного ожидания, которая обрабатывает отправку формы в React Native:

const handleSubmit = async () => {
    const credentials = { email, password }
    try {
      login(credentials)
    } catch {
      console.error('ERROR')
      //external function to reset form
      resetForm()
      return
    }

    // User authenticated, go to home screen   
    await goToHomeScreen()
  }

Где login (), который выполняет вызов API, равен

const login = (credentials) => {
  axios
    .post(`${MY_API}/login`, credentials)
    .then((res) => {
      console.log(res.data) 
    })
    .catch(() => {
      throw 'Error'
    })
}

Идея состоит в том, что в случае сбоя аутентификационного вызова мой login () выдает ошибку, которая должна запустить return в catch {} моего handleSubmit, завершив функцию. Тем не менее, перехват никогда не выполняется, и goToHomeScreen () выполняется. Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 09 июля 2019

Попробуй, у меня это работает

const login = (credentials) => {
   axios
   .post(`${MY_API}/login`, credentials)
   .then((res) => {
     console.log(res.data) 
   })
  .catch((error ) => {
      return Promise.reject(error);
  })
}
0 голосов
/ 10 июля 2019

, так как вы используете async-await, вы можете вызвать логин как:

const handleSubmit = async () => {
    const credentials = { email, password }
    try {
      await login(credentials)
    } catch {
      console.error('ERROR')
      //external function to reset form
      resetForm()
      return
    }

    // User authenticated, go to home screen   
    await goToHomeScreen()
  }

const login = async (credentials) => {
  return await axios.post(`${MY_API}/login`, credentials);
}

, это решит проблему

0 голосов
/ 09 июля 2019

не просто вернуться, а сделать что-то

axios
.get(url)
.then((response) => {
  console.log('response', response);
}
.catch((error) => {
  console.log('CATCH');
  window.alert('CATCH');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...