ReactNative 封装fetch网络请求

2024-06-03 05:58

本文主要是介绍ReactNative 封装fetch网络请求,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

封装的fetch方法类

/*** Created by 卓原 on 2017/11/14.* zhuoyuan93@gmail.com*//*** 注意这个方法前面有async关键字* @param url  请求地址* @param body 请求参数* @param method 请求方法 大写* @param successCallBack  网络请求成功的回调* @param errorCallBack    出错的回调* @returns {Promise.<*>}*/
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) {if (body) {let str = toQueryString(body);if (str && str.length > 0) url += '?' + str;}console.log(url);try {// 注意这里的await语句,其所在的函数必须有async关键字声明let response = await fetch(url);console.log('getUrl:' + 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) {/*** 请求头* @type {{Accept: string, "Content-Type": string, uk: string}}*/const headers = {'Accept': 'application/json','Content-Type': 'application/json',};try {// 注意这里的await语句,其所在的函数必须有async关键字声明let response = await fetch(url, {method: 'POST',headers,body: JSON.stringify(body)});console.log(`postUrl:${url},headers:${headers},body:${JSON.stringify(body)}`);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;
}export default {requestUrl,get,post,
};

Tips:
post请求时候,header我写在了post方法体内,可以针对自己需求改动headers内容。
当然你也可以定在在外层,但是想动态修改headers不方便。

使用方法:
(1)

import Fetch from '../utils/FetchUtil';

(2)

Fetch.get(url, '',result => {console.log(result)}, error => {console.log(error)});

第二种, 将fetch封装成类

/*** Created by 卓原 on 2018/3/1.* zhuoyuan93@gmail.com*/export default class HttpUtil {static get(url) {return new Promise((resolve, reject) => {fetch(url).then(response => response.json()).then(result => {resolve(result);}).catch(error => {reject(error);})})}static post(url, data) {return new Promise((resolve, reject) => {fetch(url, {method: 'POST',header: {'Accept': 'application/json','Content-Type': 'application/json',},body: JSON.stringify(data)}).then(response => response.json()).then(result => {resolve(result)}).catch(error => reject(error))})}}

调用:

import HttpUtil from '../util/HttpUtil';load(url) {HttpUtil.get(url).then(result => {this.setState({data: result});console.log(this.state.data)}).catch(error => {this.setState({data: error})})}

这篇关于ReactNative 封装fetch网络请求的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026165

相关文章

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依