2017-06-30 3 views
1

Dieser Code storniert GET-Anfragen, kann aber POST-Aufrufe nicht abbrechen.
Wenn ich GET-Anfragen zuerst sende und sie nicht über die Methode abortAll abbringe, beenden sie einfach selbst, dass dieses Token von selbst abbricht und bei nächsten Anfragen nicht funktioniert? Was fehlt mir? Danke, JohnKann Axios Post-Anfrage via CancelToken nicht stornieren

import axios from 'axios' 
class RequestHandler { 

constructor(){ 
    this.cancelToken = axios.CancelToken; 
    this.source = this.cancelToken.source(); 
} 

get(url,callback){ 

    axios.get(url,{ 
    cancelToken:this.source.token, 
    }).then(function(response){ 

     callback(response.data); 

    }).catch(function(err){ 

     console.log(err); 

    }) 

} 

post(url,callbackOnSuccess,callbackOnFail){ 
axios.post(url,{ 

     cancelToken:this.source.token, 

    }).then(function(response){ 

     callbackOnSuccess(response.data); 

    }).catch(function(err){ 

     callbackOnFail() 

    }) 
} 

abortAll(){ 

this.source.cancel(); 
    // regenerate cancelToken 
this.source = this.cancelToken.source(); 

} 

} 

Antwort

2

ich herausgefunden habe, dass Sie auf diese Weise Post-Anforderung zurücktreten können, i this documentation part missunderstand. Im vorherigen Code habe ich CancelToken an die POST-Datenanforderung nicht als Axios-Einstellung übergeben.

import axios from 'axios' 


var CancelToken = axios.CancelToken; 
var cancel; 

axios({ 
    method: 'post', 
    url: '/test', 
    data: { 
    firstName: 'Fred', 
    lastName: 'Flintstone' 
    }, 
    cancelToken: new CancelToken(function executor(c) { 
     // An executor function receives a cancel function as a parameter 
     cancel = c; 
    }) 
}).then(()=>console.log('success')).catch(function(err){ 

    if(axios.isCancel(err)){ 

    console.log('im canceled'); 

    } 
    else{ 

    console.log('im server response error'); 

    } 

}); 
// this cancel the request 
cancel()