React-Native Fetch使用Promise封裝(二)

/**
 * Created by dongtao on 2017/4/23.
 */
/**
 * React-Native Fatch網(wǎng)絡(luò)請求工具類
 * Songlcy create
 * params:請求參數(shù)
 * ES6 Promise 使用
 * resolve 成功時候返回
 * reject 失敗時候返回
 */

export default class HttpUtils {
    //基于 fetch 封裝的 GET請求
    static getFatch(url) {
        return new Promise((resolve, reject) => {
            fetch(url)
                .then((response)) => {
                    if (response.ok) {  
                        return response.json();  
                    } else {  
                        reject({status:response.status})  
                    }  
                })
                .then((response) => {
                    resolve(response)
                })
                .catch((error) => {
                    reject(error)
                })
        })
    }
    //基于 fetch 封裝的 POST請求
    static postFatch(url, params) {
      
        return new Promise((resolve, reject) => {
            fetch(url, {
                    method: 'POST',
                    header: {
                        'Accept': 'application/json',
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify(params)
                })
                .then((response)) => {
                  
                    if (response.ok) {  
                      
                        return response.json();  
                    } else {  
                      
                        reject({status:response.status})  
                    }  
                })
                .then((response) => {
                    //成功返回
                    resolve(response)
                })
                .catch((error) => {
                    //失敗返回
                    reject(error)
                })    
        })
    }

使用方法

 import HttpUtils from './HttpUtils'

 export default class UserFatch extends Component {
   
     HTTPUtil.post(url, params)
        .then((json) => {
            //處理 請求success
            if(json.code === 0 ){  
            //我們假設(shè)業(yè)務(wù)定義code為0時效床,數(shù)據(jù)正常  
            }else{  
                 //處理自定義異常  
                this.doException(json);  
            } 
            
        },(json) => {

          //TODO 處理請求fail  
        })
 }

下面的使用回調(diào)函數(shù)來封裝的Fatch網(wǎng)絡(luò)請求

/**
 * Created by dt on 2017/4/23.
 */
/**
 * 網(wǎng)絡(luò)請求工具類
 * Songlcy create
 * params:請求參數(shù)
 * successCallback:成功回調(diào)
 * failCallback:失敗回調(diào)
 */

import RootToast from '../pages/RootToast/RootToast'

import Environment from '../environment/Environment'

import ShowProgress from '../pages/ProgressHUD/ShowProgress';

const host = 'https:doSubmit.do'

const showProgress = new ShowProgress;

let Network = {

    postNetwork: (params,successCallBack, failCallBack)=> {

        if(params.isProgress === '1' ){

            showProgress.show();

        }

        console.log('***********************網(wǎng)絡(luò)請求報文******************************');
        console.log( JSON.stringify(params));
        console.log('================================================================');

        // const host = Environment.host();

        paramStr = 'transCode=' + params.transCode + '&requestBodyJson=' + JSON.stringify(params.request);

        fetch(host,
            {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                    
                },
                body: paramStr
            }
        ).then((response) => {

            showProgress.hidden();

            if (response.ok) {

                return response.json();

            } else {

                RootToast.show('服務(wù)器連接異常');

            }
        }).then((response) => {

            console.log('***********************成功返回****************************');
            console.log( JSON.stringify(response));
            console.log('================================================================');

            if (response.responseBody == null) {

                RootToast.show(response.errorMsg);
                if (failCallBack && typeof(failCallBack) == 'function'){

                    failCallBack(response);

                }

            } else {

                successCallBack(response);

            }

        }).catch((error) => {

            showProgress.hidden();

            console.log(error.message);

            if (failCallBack && typeof(failCallBack) == 'function') {

                failCallBack(error);

            }
        })

    }

}

export default Network;

使用方法

var params = {
            transCode: 'D1',
            request: {
                "loginName": global.loginName,
                "Password": oldPassword两波,
            },
            isProgress: '1'
        };

        Network.postNetwork(params, (response)=>{
            alert(response.responseBody.message);
            //修改成功
            if (response.responseBody.updateStatus === '1') {
                this.props.navigator.pop();
            }
        }, (response)=>{
            alert(response.errorMsg);
        });
componentDidMount() {

        let params = {
            transCode: 'D1',
            request: {
                loginName: global.loginName, 
            },
            isProgress:'1'
        }

   Network.postNetwork(params,this.successCallBack.bind(this),this.failCallBack.bind(this));

    }

    //請求成功
    successCallBack(responseData) {
        if (responseData.responseBody.poicyModels && responseData.responseBody.poicyModels.length) {
            let ds = new ListView.DataSource({
                rowHasChanged: (row1, row2) => row1 !== row2,
            });
            this.setState({
                dataSource: ds.cloneWithRows(responseData.responseBody.poicyModels),
                noListData: false,
            });
        } else {
            this.setState({
                noListData: true,
            });
        }


    }

    failCallBack(error){

        this.setState({
        });

    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谎懦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子银萍,更是在濱河造成了極大的恐慌捂寿,老刑警劉巖算色,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羊异,死亡現(xiàn)場離奇詭異,居然都是意外死亡捉撮,警方通過查閱死者的電腦和手機怕品,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巾遭,“玉大人肉康,你說我怎么就攤上這事∽粕幔” “怎么了吼和?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骑素。 經(jīng)常有香客問我炫乓,道長,這世上最難降的妖魔是什么献丑? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任末捣,我火速辦了婚禮,結(jié)果婚禮上创橄,老公的妹妹穿的比我還像新娘塔粒。我一直安慰自己,他們只是感情好筐摘,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般咖熟。 火紅的嫁衣襯著肌膚如雪圃酵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天馍管,我揣著相機與錄音郭赐,去河邊找鬼。 笑死确沸,一個胖子當(dāng)著我的面吹牛捌锭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罗捎,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼观谦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桨菜?” 一聲冷哼從身側(cè)響起豁状,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倒得,沒想到半個月后泻红,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡霞掺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年谊路,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菩彬。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡缠劝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挤巡,到底是詐尸還是另有隱情剩彬,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布矿卑,位于F島的核電站喉恋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏母廷。R本人自食惡果不足惜轻黑,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琴昆。 院中可真熱鬧氓鄙,春花似錦、人聲如沸业舍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至态罪,卻和暖如春噩茄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背复颈。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工绩聘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耗啦。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓凿菩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親帜讲。 傳聞我的和親對象是個殘疾皇子衅谷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容