react-native fetch 请求封装

本文介绍了一个fetch函数的封装实现,包括GET和POST请求的方法,并提供了错误处理机制。该封装简化了HTTP请求的过程,适用于前后端开发场景。

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;
}

.

转载于:https://www.cnblogs.com/crazycode2/p/9389181.html

React Native 中,`fetch` 是一个基于 Promise 的网络请求 API,用于发起 HTTP 请求,支持 `GET`、`POST` 等常见方法,并具备良好的异步处理能力。它符合 Web 标准,是官方推荐的基础网络请求方案。 ### 发起 GET 请求 使用 `fetch` 发起 GET 请求非常简单,只需要传入目标 URL 即可。响应数据通常通过 `.json()` 或 `.text()` 方法解析: ```javascript fetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); ``` 该方式适用于获取 JSON 格式或纯文本数据。若响应内容较大,也可以使用 `response.text()` 来处理流式文本 [^1]。 ### 发起 POST 请求 对于 POST 请求,除了指定 `method` 为 `'POST'`,还需要设置 `headers` 和 `body`。例如,发送 JSON 格式的数据: ```javascript fetch('https://api.example.com/endpoint', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ key: 'value', }), }); ``` 这种方式广泛用于向后端提交表单数据或进行身份验证操作 [^1]。 ### 处理请求超时 默认情况下,`fetch` 请求没有内置的超时机制,这在实际应用中可能导致用户体验不佳。为解决这一问题,可以通过封装一个具有超时控制的 `fetch` 方法,利用 `Promise.race` 实现超时逻辑: ```javascript const timeoutFetch = (url, options, timeout = 5000) => { const controller = new AbortController(); const { signal } = controller; const fetchPromise = fetch(url, { ...options, signal }); const timeoutPromise = new Promise((_, reject) => { setTimeout(() => { controller.abort(); reject(new Error('请求超时')); }, timeout); }); return Promise.race([fetchPromise, timeoutPromise]); }; // 使用示例 timeoutFetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); ``` 此方法在 Android 和 iOS 上均适用,可有效提升网络请求的可控性 [^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值