Я хочу перенаправить пользователя куда-нибудь, если он / она вошел в систему, я могу использовать 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
})
Это тоже не работает.
Что еще я могу сделать, кроме использования, чтобы перенаправить пользователя на страницу авторизации?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы также должны вернуться из обратных вызовов 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;
})
}
}
Используйте response-redux connect, чтобы получить статус пользователя из состояния redux.
Вы можете вернуть обещание вроде
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, потому что он устарел.
если я не хочу использовать then (), в сокращении, как я могу проверить, что пользователь вошел в систему в компоненте? Мне не нравится возвращать несколько одинаковых объектов.