react-native fetch 请求封装

1.fetch 函数封装

fetch.js

/**
 * 请求头
 * @type {{Accept: string, Content-Type: string}}
 */
const header = {
  'Accept': 'application/json',
  'Content-Type': 'application/json',
};
 
/**
 * 注意这个方法前面有async关键字
 * @param url  请求地址
 * @param body 请求参数
 * @param method 请求方法 大写
 * @param successCallBack  网络请求成功的回调
 * @param errorCallBack    出错的回调
 * @returns {Promise.<*>}
 */
export function requestUrl(url, method, body, successCallBack: func, errorCallBack: func) {
  if ('GET' === method) {
    get(url, body, successCallBack, errorCallBack);
  }
  else {
    post(url, body, successCallBack, errorCallBack);
  }
}
 
/**
 * get请求
 */
async function get(url, body, successCallBack, errorCallBack) {
  let str = toQueryString(body);
  if (str && str.length > 0) url += '?' + str;
  console.log(url);
  try {
    // 注意这里的await语句,其所在的函数必须有async关键字声明
    let response = await fetch(url);
    console.log('reqyestUrl:' + url);
    let responseJson = await response.json();

    return successCallBack(responseJson);
  } catch (error) {
    return errorCallBack(error);
    //console.error(error);
  }
}
 
/**
 * post请求
 */
async function post(url, body, successCallBack, errorCallBack) {
  try {
    // 注意这里的await语句,其所在的函数必须有async关键字声明
    let response = await fetch(url, {
      method: 'POST',
      headers: header,
      body: JSON.stringify(body)
    });

    console.log('reqyestUrl:' + url);
    let responseJson = await response.json();

    return successCallBack(responseJson);
  } catch (error) {
    return errorCallBack(error);
  }
}
 
 
/**
 * 用于对对象编码以便进行传输
 * @param obj 对象参数
 * @returns {string} 返回字符串
 */
function toQueryString(obj) {
  let str = '';
  if (obj) {
    let keys = [];
    for (let key in obj) {
      keys.push(key);
    }
    keys.forEach((key, index) => {
      str += key + '=' + obj[key];
      if (index !== keys.length - 1) {
        str += '&';
      }
    });
  }
  return str;
}

.

猜你喜欢

转载自www.cnblogs.com/crazycode2/p/9389181.html