반응형
vue.js와 함께 axios를 사용하여 이전 요청을 취소합니다.
사용하고 있다axios
그리고.vue.js
.구글을 하고 있고, Axios 문서를 확인했지만, 아직 방법을 알 수 없습니다.
2020 업데이트: Axios 요청을 취소하는 방법
을 생성하다cancelToken
저장하다
import axios from 'axios'
const request = axios.CancelToken.source();
을 통과하다cancelToken
신봉자의 요구에 따라
axios.get('API_URL', { cancelToken: request.token })
저장한 요청에 액세스하여.cancel()
취소 방법
request.cancel("Optional message");
Axios 취소를 살펴봅니다.
HTML:
<button @click="send">Send</button>
<button :disabled="!request" @click="cancel">Cancel</button>
JS
import axios from "axios";
export default {
data: () => ({
requests: [],
request: null
}),
methods: {
send() {
if (this.request) this.cancel();
this.makeRequest();
},
cancel() {
this.request.cancel();
this.clearOldRequest("Cancelled");
},
makeRequest() {
const axiosSource = axios.CancelToken.source();
this.request = { cancel: axiosSource.cancel, msg: "Loading..." };
axios
.get(API_URL, { cancelToken: axiosSource.token })
.then(() => {
this.clearOldRequest("Success");
})
.catch(this.logResponseErrors);
},
logResponseErrors(err) {
if (axios.isCancel(err)) {
console.log("Request cancelled");
}
},
clearOldRequest(msg) {
this.request.msg = msg;
this.requests.push(this.request);
this.request = null;
}
}
};
이 예에서는 새 요청이 시작될 때 현재 요청이 취소됩니다.오래된 요구가 취소되기 전에 새로운 요구가 발행되면 서버는 5초 후에 응답합니다.그cancelSource
는 요청을 취소하기 위해 사용할 수 있는 취소 토큰을 지정합니다.상세한 것에 대하여는, Axios 의 메뉴얼을 참조해 주세요.
new Vue({
el: "#app",
data: {
searchItems: null,
searchText: "some value",
cancelSource: null,
infoText: null
},
methods: {
search() {
if (this.searchText.length < 3)
{
return;
}
this.searchItems = null;
this.infoText = 'please wait 5 seconds to load data';
this.cancelSearch();
this.cancelSource = axios.CancelToken.source();
axios.get('https://httpbin.org/delay/5?search=' + this.searchText, {
cancelToken: this.cancelSource.token }).then((response) => {
if (response) {
this.searchItems = response.data;
this.infoText = null;
this.cancelSource = null;
}
});
},
cancelSearch () {
if (this.cancelSource) {
this.cancelSource.cancel('Start new search, stop active search');
console.log('cancel request done');
}
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<input v-model="searchText" type="text" />
<button @click="search">Search</button>{{infoText}}
<pre>
{{searchItems}}
</pre>
</div>
먼저 몇 가지 변수를 정의합니다.
data: function () {
return {
request_source : ''
}
},
그 후 방법 내부
source = CancelToken.source();
if(this.request_source != '')
this.request_source.cancel('Operation canceled by the user.');
this.request_source = source;
axios
.get(
URL,
{
params:{key1: value1},
cancelToken: this.request_source.token
}
)
언급URL : https://stackoverflow.com/questions/50516438/cancel-previous-request-using-axios-with-vue-js
반응형
'programing' 카테고리의 다른 글
Vue 컴포넌트 - 렌더링 위치가 잘못됨 (0) | 2022.09.03 |
---|---|
java.nio. 파일을 가져옵니다.java.io로부터의 패스 오브젝트파일 (0) | 2022.09.03 |
vuex에서 vue 인스턴스를 사용하는 더 나은 방법 (0) | 2022.09.03 |
Windows 7에 pywin32 모듈을 설치하는 방법 (0) | 2022.09.03 |
Vue.js: 리플릿 마커가 표시되지 않음 (0) | 2022.09.03 |