Обещать затем вернуть undefined в отправке преобразователя?

Я хочу перенаправить пользователя куда-нибудь, если он / она вошел в систему, я могу использовать Promise для этого, но мой асинхронный преобразователь redux ничего не возвращает в ответ обратно компоненту.

export function loginUser(email,password){
  return dispatch=>{

    return axios.post('auth/login', {email,password})
      .then(res=>{
        if (res.status===200 && res.data.status===1){

          //things are working here
          dispatch({
            type: AUTH_SUCCESS,
            payload: res.data.data
          })
        }
      })
      .catch(res => { 
        dispatch(errorMsg(res.data.msg))
      })
  }
}

В моем компоненте я сделал

componentDidMount() {
  this.props.loginUser('username', 'pass')
  .then(resp => {
    console.info(resp) //this is undefined?!
  })
}

Я пробовал это

return dispatch({
  type: AUTH_SUCCESS,
  payload: res.data.data
})

Это тоже не работает.

Что еще я могу сделать, кроме использования, чтобы перенаправить пользователя на страницу авторизации?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
301
2

Ответы 2

Вы также должны вернуться из обратных вызовов Promise .then() и .catch():

export function loginUser(email,password){
  return dispatch=>{

    return axios.post('auth/login', {email,password})
      .then(res=>{
        if (res.status===200 && res.data.status===1){

          //things are working here
          dispatch({
            type: AUTH_SUCCESS,
            payload: res.data.data
          })

          // return when success
          return {
            type: AUTH_SUCCESS,
            payload: res.data.data
          }
        }

        // return if failed, you can also return Promise.reject to invoke the .catch
        return "something" 
      })
      .catch(res => { 
        dispatch(errorMsg(res.data.msg))

        // return error message
        return res.data.msg;
      })
  }
}

если я не хочу использовать then (), в сокращении, как я могу проверить, что пользователь вошел в систему в компоненте? Мне не нравится возвращать несколько одинаковых объектов.

Jamie Aden 03.05.2018 18:35

Используйте response-redux connect, чтобы получить статус пользователя из состояния redux.

Ori Drori 03.05.2018 18:36

Вы можете вернуть обещание вроде

export function loginUser(email,password){
  return dispatch=>{
   return new Promise((resolve, reject) => {
      axios.post('auth/login', {email,password})
      .then(res=>{
        if (res.status===200 && res.data.status===1){
          resolve(res.data.data)
          //things are working here
          dispatch({
            type: AUTH_SUCCESS,
            payload: res.data.data
          })
        }
        reject(res.status)
      })
      .catch(res => { 
        reject(res);
        dispatch(errorMsg(res.data.msg))
      })
    })
  }
}

выглядят излишними, потому что return axios уже является обещанием. Что, если я хочу использовать redux, чтобы проверить, вошел ли пользователь в журнал, как это будет выглядеть? Я не хочу использовать componentWillRecieiveProps, потому что он устарел.

Jamie Aden 03.05.2018 18:36

Другие вопросы по теме