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

相关文章

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

javascript fetch 用法讲解

《javascriptfetch用法讲解》fetch是一个现代化的JavaScriptAPI,用于发送网络请求并获取资源,它是浏览器提供的全局方法,可以替代传统的XMLHttpRequest,这篇... 目录1. 基本语法1.1 语法1.2 示例:简单 GET 请求2. Response 对象3. 配置请求