2017-06-30 20 views
1

このコードはGETリクエストをキャンセルしますが、POSTコールを中止できません。
私はGETリクエストを最初に送信し、abortAllメソッドで取り消してもらえません。それだけで、このトークン自体がキャンセルされ、次のリクエストでは機能しません。 私は何が欠けていますか? おかげで、ジョン・Cant cancel AxiosはCancelTokenを介してリクエストを送信します

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(); 

} 

} 

答えて

2

は、私はあなたがこのようPOSTリクエストを取り消すことができることを見出した、私はthis documentation partをmissunderstand。 前のコードでは、私はcancelTokenをAxios設定ではなくPOSTデータリクエストに渡しました。

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() 
関連する問題