반응형
vuex, axios에서 불필요한 요청을 모두 취소하는 방법
문제가 있다: 페이지를 실행하면 비동기 기능이mounted
훅이 계속 기능한다(예를 들어)await this.getUser({id: 1})
)를 사용하려고 합니다.axios.CancelToken
단, 유감스럽게도 첫 번째 요구만 취소됩니다(모든 요구는 아닙니다).요청 전송 기능:
const source = axios.CancelToken.source();
const config = {
headers: {
authorization: `${prefix}${localStorage.getItem('authorization')}`
},
cancelToken: source.token
};
store.commit('SET_CANCEL_SOURCE', source);
const response = await axios.get(url, config);
돌연변이 저장:
SET_CANCEL_SOURCE: (state, cancel: CancelTokenSource) => {
state.cancelTokens.push(cancel);
},
RESET_CANCEL_TOKENS: (state) => {
if (state.cancelTokens.length) {
state.cancelTokens.map((item: any, index: number) => {
console.log(index, item);
item.cancel();
});
state.cancelTokens = [];
}
}
저장 작업:
clearToken ({commit}) {
commit('RESET_CANCEL_TOKENS');
}
컴포넌트의 마운트 해제 전:
beforeUnmount() {
this.clearToken();
}
좋은 생각 있어요?
요점은 말이다CancelToken
는 이미 전송된 요청만 취소합니다.내가 찾은 가장 좋은 해결책은 정보를 로드하는 단계를 만들고, 변수를 만드는 것이다. 현재 단계를 나타내는 변수와beforeUnmount
가변화하다isCancelled = true
다음 단계가 배출되지 않도록 합니다.예:
data: () => ({
stage: 0,
isCancelled: false,
}),
async setInitialData() {
if (this.stage >= 4 || this.isCancelled) {
return;
}
switch (this.stage) {
case 0:
await action1();
break;
case 1:
await action2();
break;
case 2:
await action3();
break;
case 3:
await action2();
break;
default:
break;
}
this.stage++;
await this.setInitialData();
},
async mounted() {
await this.setInitialData();
},
beforeUnmount() {
this.isCancelled = true;
},
언급URL : https://stackoverflow.com/questions/69273033/how-to-cancel-all-unneccesary-requests-in-vuex-axios
반응형
'programing' 카테고리의 다른 글
어레이의 VueJs에서 동적 '자세히 읽기' 버튼을 긴 텍스트로 설정하는 방법 (0) | 2022.08.13 |
---|---|
Vue.js 슬롯을 프로그래밍 방식으로 작성하는 방법 (0) | 2022.08.13 |
스토어 내에서 액션에 액세스하거나 디스패치를 하는 방법 (0) | 2022.08.13 |
Java 문자열에 있는 두 개 이상의 공백을 단일 공백으로 대체하고 선행 및 후행 공백을 삭제하는 방법 (0) | 2022.08.13 |
One-past-malloc을 가리키는 포인터를 사용하는 것이 잘 정의되어 있습니까? (0) | 2022.08.13 |