how to cancel/abort ajax request in axios

前端 未结 8 676
广开言路
广开言路 2020-12-05 06:19

I use axios for ajax requests and reactJS + flux for render UI. In my app there is third side timeline (reactJS component). Timeline c

8条回答
  •  情深已故
    2020-12-05 06:46

    Using cp-axios wrapper you able to abort your requests with three diffent types of the cancellation API:

    1. Promise cancallation API (CPromise):

    Live browser example

     const cpAxios= require('cp-axios');
     const url= 'https://run.mocky.io/v3/753aa609-65ae-4109-8f83-9cfe365290f0?mocky-delay=5s';
     
     const chain = cpAxios(url)
          .timeout(5000)
          .then(response=> {
              console.log(`Done: ${JSON.stringify(response.data)}`)
          }, err => {
              console.warn(`Request failed: ${err}`)
          });
     
     setTimeout(() => {
        chain.cancel();
     }, 500);
    

    2. Using AbortController signal API:

     const cpAxios= require('cp-axios');
     const CPromise= require('c-promise2');
     const url= 'https://run.mocky.io/v3/753aa609-65ae-4109-8f83-9cfe365290f0?mocky-delay=5s';
     
     const abortController = new CPromise.AbortController();
     const {signal} = abortController;
     
     const chain = cpAxios(url, {signal})
          .timeout(5000)
          .then(response=> {
              console.log(`Done: ${JSON.stringify(response.data)}`)
          }, err => {
              console.warn(`Request failed: ${err}`)
          });
     
     setTimeout(() => {
        abortController.abort();
     }, 500);
    

    3. Using a plain axios cancelToken:

     const cpAxios= require('cp-axios');
     const url= 'https://run.mocky.io/v3/753aa609-65ae-4109-8f83-9cfe365290f0?mocky-delay=5s';
    
     const source = cpAxios.CancelToken.source();
     
     cpAxios(url, {cancelToken: source.token})
          .timeout(5000)
          .then(response=> {
              console.log(`Done: ${JSON.stringify(response.data)}`)
          }, err => {
              console.warn(`Request failed: ${err}`)
          });
     
     setTimeout(() => {
        source.cancel();
     }, 500);
    

提交回复
热议问题