Axios 응답 Vuex에서 작업을 호출하는 방법은 무엇입니까?
저는 다음과 같은 논리를 구현하려고 합니다: 로그인을 호출한 다음 응답이 괜찮다면 사용자 데이터를 검색하는 방법을 호출합니다.
로그인 동작
loginUser({commit,dispatch}, credentials) {
const form = new URLSearchParams();
form.append("login", credentials.login);
form.append("password", credentials.password);
const formConfig = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
};
return Axios.post(loginUrl, form, formConfig).then(
(response) => {
commit('setErrorMessage', '', {root: true});
commit('setAuthenticated', response.headers[authorization]);
dispatch('getUserByLoginAuth',credentials.login);
},
(error) => {
if (error.response.status===500){
commit('setErrorMessage', error.response.data.message, {root: true});
} else {
commit('setErrorMessage', error.response.data, {root: true});
}
});
},
위의 작업에서 두 번째 작업이 발송되었습니다.
getUserByLoginAuth({commit, getters}, login) {
return getters.authenticatedAxios.get(userUrl + '/find', {
params: {
login: login
}
}).then(
(response) => {
commit('setErrorMessage', '', {root: true});
commit('setUser', response.data);
},
(error) => {
commit('setErrorMessage', error.response.data, {root: true});
});
},
이 작업은 두 번째에서만 호출됩니다(약속과 관련이 있는 것으로 알고 있습니다).
다음은 로그인 작업을 발송하는 구성 요소의 코드입니다.
this.$store.dispatch('loginUser', this.credentials).then(() => {
this.errorMessage = this.getError;
if (this.errorMessage.length) {
this.errorOccurred = true;
}
this.$router.push({path: '/user/' + this.getId});
});
this.errorOccurred = false;
},
또한 제가 올바른 위치에서 라우팅을 수행하고 있는지 확신할 수 없습니다.내가 이해하기로는 getUser의 약속으로 작동할 것이므로 로그인에서 오류 메시지가 손실될 수 있습니다.저는 그것을 막고 처음부터 getUser를 올바르게 발송하고 싶습니다.
저는 당신이 요구하는 것을 전적으로 이해하지는 못하지만 이것이 문제가 될 것 같습니다.
dispatch('getUserByLoginAuth',credentials.login);
문제는 통화 자체가 아닙니다.문제는 그것이 기존의 약속에 얽매이지 않고 새로운 비동기식 행동을 시작하고 있다는 것입니다.의 관점에서.loginUser모든 것이 완료되었습니다. 기다리지 않을 것입니다.getUserByLoginAuth.
결과는 다음과 같습니다.then이전에 구성 요소에서 호출됩니다.getUserByLoginAuth완료되었습니다.저는 이것이 두 번째로 작동하는 이유라고 생각합니다. 왜냐하면 그것은 이전 통화의 관련 데이터를 수집하고 있기 때문입니다.
솔루션은 단순히 다음으로 변경하는 것입니다.
return dispatch('getUserByLoginAuth',credentials.login);
를 넣음으로써.return그것은 그것을 약속 체인에 추가합니다, 그래서.loginUser까지 완전한 것으로 취급되지 않을 것입니다.getUserByLoginAuth완료되었습니다.
언급URL : https://stackoverflow.com/questions/57826201/how-to-call-action-from-action-on-axios-response-vuex
'programing' 카테고리의 다른 글
| Firebase 관리자용 "serviceAccountCredentials.json"은 어디에서 얻을 수 있습니까? (0) | 2023.07.03 |
|---|---|
| 앱을 Spring Boot로 마이그레이션한 후 Spring Data Rest를 사용하는 동안 @Id의 엔티티 속성이 더 이상 JSON으로 마샬링되지 않음을 확인했습니다. (0) | 2023.07.03 |
| git - 병합 시 특정 커밋 건너뛰기 (0) | 2023.07.03 |
| C 스타일 배열에서 std:: 벡터를 초기화하는 방법은 무엇입니까? (0) | 2023.07.03 |
| 캐럿(^) 연산자는 무엇을 합니까? (0) | 2023.06.28 |