我想将用户重定向到某个已登录的地方,我可以使用Promise来做到这一点,但是我的redux thunk异步不会在响应中返回任何内容。

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
})


它也不起作用。

除了使用then,我还能做什么来将用户重定向到登录页面?

最佳答案

您还必须从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;
      })
  }
}

10-06 00:19