Обещание, а затем вернуть неопределенное в Thunk отправки? - PullRequest
0 голосов
/ 03 мая 2018

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

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.log(resp) //this is undefined?!
  })
}

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

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

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))
      })
    })
  }
}
0 голосов
/ 03 мая 2018

Вы также должны вернуться из обратных вызовов 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;
      })
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...