点击查看代码
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);
});