2017-09-08 21 views
1

我有多個組件,其中包含一些獲取請求的axios插件。我需要一些幫助來取消所有的xhr請求與反應js組件unmount事件axios。但axios取消代碼不起作用。它返回我cancel()不是一個函數錯誤。取消使用axios卸載異步請求

代碼示例: -

import axios from 'axios'; 


var CancelToken = axios.CancelToken; 
var cancel; 

axios.get('abc/xyz', { 
    cancelToken: new CancelToken(function executor(c) { 
    // An executor function receives a cancel function as a parameter 
    cancel = c; 
    }) 
}); 

// cancel the request 
cancel(); 

請幫我實現取消Axios公司的請求。

謝謝。

回答

0

除非您使用RxJS,否則無法取消請求。我建議你使用redux-observable來達到這個目的。請查詢this瞭解更多信息。您必須在Epic中使用takeUntil運算符,並在取消操作觸發時執行取消操作。以下是上述資源給出的示例代碼。

import { ajax } from 'rxjs/observable/dom/ajax'; 

const fetchUserEpic = action$ => 
    action$.ofType(FETCH_USER) 
    .mergeMap(action => 
     ajax.getJSON(`/api/users/${action.payload}`) 
     .map(response => fetchUserFulfilled(response)) 
     .takeUntil(action$.ofType(FETCH_USER_CANCELLED)) 
    ); 
+0

這段代碼(redux-observable)是woking還是與promises和組件結構有關? –

+0

它使用RxJS'Observables',它是根據您的響應創建的事件流。然後,您必須創建Observable訂閱才能獲得結果。它還提供了許多操作符(如地圖,平面地圖,zip等)的很好的組合API。它與ES6獲取和基於承諾的方法是不同的範例。這種更加可組合的方法。 –

+0

你可以參考我的一些想法,而不使用REDX或服務器。實際上,我創建了一個非常小的應用程序,其中有2個或3個組件隨路線變化。我必須在反應js生命週期中取消unmount()上的所有api請求。 –