点击查看代码
const baseUrl = 'https://your-api-base-url.com';

function getAuthToken() {
// 获取token的逻辑,可能会从全局状态、本地存储等地方获取
// 返回token字符串或null
} function updateAuthToken(token) {
// 更新token的逻辑
} function getUserInfoWithNewToken() {
// 使用新的token获取用户信息的逻辑
// 可能涉及到发送另一个请求
} function requestWithRetry(options) {
const token = getAuthToken();
const headers = {
...options.headers,
Authorization: `Bearer ${token}`,
}; return new Promise((resolve, reject) => {
uni.request({
...options,
header: headers,
success: (response) => {
if (response.statusCode === 200) {
// 假设服务器返回的数据结构是 { code: 200, data: { ... } }
resolve(response.data.data); // 简化data一层
} else if (response.statusCode === 401) {
// token无效或已过期,尝试刷新token
refreshAuthToken().then(newToken => {
// 更新token
updateAuthToken(newToken);
// 使用新token重新发送请求
requestWithRetry({
...options,
headers: {
...options.headers,
Authorization: `Bearer ${newToken}`,
},
}).then(resolve).catch(reject);
}).catch(() => {
reject(new Error('Unauthorized'));
});
} else {
reject(new Error('Error in response'));
}
},
fail: (error) => {
reject(error);
},
});
});
} function refreshAuthToken() {
return new Promise((resolve, reject) => {
// 发送请求获取新的token
// 假设这里发送了一个请求并获取到了新的token
const newToken = 'your-new-token';
resolve(newToken);
});
} // 使用封装的请求函数
requestWithRetry({
url: `${baseUrl}/your-endpoint`,
method: 'GET',
headers: { /* your additional headers */ },
}).then(data => {
console.log('Request successful with data:', data);
}).catch(error => {
console.error('Request failed:', error);
});

uni.request二次封装的更多相关文章

  1. 【uni-app】uni.request二次封装,更好的管理api接口和使用

    前言 之前写了一个Vue.js的axios二次封装(点击跳转),这次是uni-app,uni-app是基于vue.js框架的,我觉得是很好用的一个框架,而且一套代码编译那么多平台,非常节省成本,当然, ...

  2. uni-app 环境配置,uni.request封装,接口配置,全局配置,接口调用的封装

    1.环境配置 (可参考uni-官网的环境配置) common文件夹下新建config.js let url_config = "" if(process.env.NODE_ENV ...

  3. uni-app请求uni.request封装使用

    对uni.request的一些共同参数进行简单的封装,减少重复性数据请求代码.方便全局调用. 先在目录下创建 utils 和 common 这2个文件夹 utils 是存放工具类的,common 用来 ...

  4. uniapp封装uni.request请求

    封装一个uniapp请求 新建一个http.js文件封装uni.request const BASE_URL = process.env.NODE_ENV === 'development' ? '' ...

  5. Android 应用程序集成FaceBook 登录及二次封装

    1.首先在Facebook 开发者平台注册一个账号 https://developers.facebook.com/ 开发者后台  https://developers.facebook.com/ap ...

  6. AFNetworking二次封装的那些事

    AFNetworking可是iOS网络开发的神器,大大简便了操作.不过网络可是重中之重,不能只会用AFNetworking.我觉得网络开发首先要懂基本的理论,例如tcp/ip,http协议,之后要了解 ...

  7. volley二次封装

    产品中使用Volley框架已有多时,本身已有良好封装的Volley确实给程序开发带来了很多便利与快捷.但随着产品功能的不断增加,服务器接口的不断复杂化,直接使用Volley原生的JSONObjectR ...

  8. vue项目中对axios的二次封装

    近来在使用vue重构公司m站时,使用了axios来进行数据的请求,由于项目的需要,对axios进行了二次封装,点击进入axios //引入axios import axios from 'axios' ...

  9. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据

    OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...

  10. 借鉴Glide思想二次封装Fresco

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近封装了个 Fresco 的组件库:DFresco,就顺便来讲讲. 背景 Fresco 图片库很强大,我们项目中就是使用的 Fre ...

随机推荐

  1. Hall定理小记

    前言 Hall定理:一张二分图有完美匹配(即最大匹配为 \(\min\{|X|,|Y|\}\) ) 当且仅当任意一个点集 \(X'\) 与所有能直接到达 \(X'\) 的点集 \(Y'\), 也就是 ...

  2. Docker学习路线10:容器安全

    容器安全是实施和管理像Docker这样的容器技术的关键方面.它包括一组实践.工具和技术,旨在保护容器化应用程序及其运行的基础架构.在本节中,我们将讨论一些关键的容器安全考虑因素.最佳实践和建议. 容器 ...

  3. Luogu P3007 奶牛议会

    观前须知 本题解使用 CC BY-NC-SA 4.0 许可. 同步发布于 Luogu 题解区. 更好的观看体验 请点这里. 笔者的博客主页 正文 Luogu P3007 [USACO11JAN] Th ...

  4. sql 语句系列(加减乘除与平均)[八百章之第十四章]

    avg的注意事项 一张t2表: select * from t2 select AVG(sal) from t2 得到的结果是: 本来我们得到的结果应该是10的.但是得到的结果确实15. 这是因为忽略 ...

  5. mysql 重新整理——配置文件[一]

    前言 对mysql 进行从新整理一下,仅做参考,如有任何不对望指出. 正文 mysql 一般分windows和linux,但是他们的运行配置其实是一样的,所以在此不做区分. 直接上一个大体的图: 我个 ...

  6. 推荐一个计算Grad-CAM的Python库

    前言 类激活图CAM(class activation mapping)用于可视化深度学习模型的感兴趣区域,增加了神经网络的可解释性.现在常用Grad-CAM可视化,Grad-CAM基于梯度计算激活图 ...

  7. SRC信息收集方法论

    "感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友.您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!" SRC信息 ...

  8. Oracle 简单的创建一个定时任务job

    Oracle 简单的创建一个定时任务job Oracle 简单的创建一个定时任务job 没有什么前置步骤,无非就是把存储过程或者SQL提前写好,就不说了,直接执行一下下面的语句即可创建一个job de ...

  9. 【pytorch学习】之数据预处理

    2 数据预处理 为了能用深度学习来解决现实世界的问题,我们经常从预处理原始数据开始,而不是从那些准备好的张量格式数据开始.在Python中常用的数据分析工具中,我们通常使用pandas软件包.像庞大的 ...

  10. EventBridge 特性介绍|以 IaC 的方式使用 EventBridge

    ​简介:本文将重点介绍 EventBridge 和 IaC 的重点概念和特性,然后演示如何应用 IaC 理念自动化部署 EventBridge 来使用这些概念和特性. 作者:王川(弗丁) 引言 Eve ...