rn-fetch-blob+redux 取消請求

其實取消請求對於普通的ajax請求rn-fetch-blob寫法是比較簡單的ajax

1 let task = RNFetchBlob.fetch('GET', 'http://example.com/file/1')
2  
3 task.then(() => { ... })
4     // handle request cancelled rejection
5     .catch((err) => {
6         console.log(err)
7     })
8 // cancel the request, the callback function is optional
9 task.cancel((err) => { ... })

可是咱們的整個應用結合了redux,不可能直接在組件中調用ajax請求,那麼咱們的action多是這樣的npm

 1 export const login = (data) => dispatch => {
 2     //ajax 是咱們本身封裝的方法,可是底層仍是rn-fetch-blob,返回的依然是一個promise
 3     let promise = ajax.post({
 4         url:"/user/login",
 5         data:data
 6     });
 7     //這裏返回的payload是隻有ajax的數據
 8     promise.then(payload=>{
 9         dispatch({type:"LOGIN_SUCCESS",payload});
10     });
11     return promise;
12 };

每個action這樣幹其實很噁心,都要作這樣的兩個操做,效率沒提升,反而多了不少的冗餘代碼redux

想了想,乾脆本身寫個中間件來處理這個吧 promise

噹噹噹當 fetch-blob-redux-middleware 誕生post

加入fetch-blob-redux-middleware後的action寫法:fetch

1 //createAction 爲第三方的小插件,使用redux-actions 或者 create-action 均可以
2 export const login = (data) => createAction("LOGIN_SUCCESS",()=> ajax.post({
3     url:"/user/login",
4     data:data
5 }));

是否是簡介了不少,寫代碼速度估計也會快不少,固然在寫fetch-blob-redux-middleware的時候我作了兼容處理,也支持之前的普通的ajax調用方法,因此你們放心的用吧url

固然你們也能夠根據須要本身寫redux middleware,很簡單的spa

相關文章
相關標籤/搜索