QQ咨询 官方微信

添加微信好友

官方小程序

百度小程序

微信小程序

头条小程序

关于我们

uniapp

Uniapp接口事件捕获入门教程

 shitouadmin  2025-04-02 15:30:02
一、什么是Uniapp接口事件捕获



在Uniapp开发中,接口事件捕获是指监听和处理应用程序与服务器API交互过程中发生的各种事件。这些事件包括请求发起、响应接收、错误处理等关键节点,通过合理的事件捕获机制,开发者可以更好地控制应用的数据流和用户交互体验。
二、基本的事件捕获方法
1. 使用uni.request的基础事件处理
javascript
uni.request({
url: 'https://example.com/api/data',
method: 'GET',
success: (res) => {
console.log('请求成功', res.data);
// 成功回调处理
},
fail: (err) => {
console.error('请求失败', err);
// 失败回调处理
},
complete: () => {
console.log('请求完成');
//无论成功失败都会执行
}
});

2. Promise风格的异步处理
javascript
async function fetchData() {
try {
const res = await uni.request({
url: 'https://example.com/api/data'
});
console.log('数据获取成功', res[1].data);

// ES6解构写法
const [err, successRes] = await uni.request({
url: 'https://example.com/api/data'
});

if(err) {
throw err;
}

return successRes.data;

} catch (error) {
console.error('发生错误:', error);
uni.showToast({ title: '加载失败', icon: 'none' });
}
}

三、全局拦截器配置(高级用法)
1. request拦截器
javascript
// main.js中配置全局拦截器
uni.addInterceptor('request', {
invoke(args) {
console.log('即将发起请求:', args.url);
//可添加全局参数如token
if(!args.header) args.header = {};
args.header['Authorization'] = 'Bearer xxx';

//可修改URL等参数
if(args.url.indexOf('/api/') === -1){
args.url = '/api/v2' + args.url;
}

return args;
},

fail(err){
console.error('请求调用失败:', err);
return err;
}
});

2.response拦截器
javascript
uni.addInterceptor('request', {
returnValue(res){
if(res.statusCode !==200){
uni.showModal({
title:'提示',
content:`服务异常(${res.statusCode})`
});
return Promise.reject(res);
}

if(res.data.code !==0){
return Promise.reject(res.data);
}

return res.data.data;//只返回核心业务数据
},
});

四、常见场景解决方案
场景一:统一错误处理
javascript
//封装统一的错误处理方法 function handleError(error){
let msg='';
if(typeof error ==='string'){
msg=error;
}else if(error.errMsg){
msg=error.errMsg;
}else{
msg='系统异常';
}
uni.showToast({title:msg,icon:'none'});
if(error.code===401){
setTimeout(()=>{
uni.navigateTo({url:'/pages/login/login'}); },1500)
}
}
//在fail回调中使用 .fail(handleError)

场景二:加载状态管理
javascript
let requestCount=0;
function showLoading(){
requestCount++;
if(requestCount===1){
uni.showLoading({title:'加载中...'});
}
}
function hideLoading(){
requestCount--;
if(requestCount<=0){
uni.hideLoading();
}
}
//在拦截器中调用:
invoke(){showLoading();},
complete(){hideLoading();}
场景三:重试机制
jsx
async function requestWithRetry(options,retryTimes=3){
for(let i=0;i try{
const res=await uni.request(options);
return res;
}catch(e){
if(i===retryTimes-1) throw e;
await new Promise(r=>setTimeout(r,1000));
}
}
}
五、最佳实践建议
1.分层封装:基础层只做通信,业务层单独处理逻辑;
2.类型安全:对重要接口定义TypeScript类型;
3.敏感信息:不要在拦截器中硬编码密钥等敏感信息;
4.性能监控:可在complete中记录耗时用于性能分析;
5.取消机制:对耗时操作提供abort能力。
¥ 打赏
×
如果您觉得文章帮助了您就打赏一下吧
非常感谢你的打赏,我们将继续分享更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

本文《Uniapp接口事件捕获入门教程》发布于石头博客文章,作者:shitouadmin,如若转载,请注明出处:https://www.pweb123.com/frame/uniapp/1111.html,否则禁止转载,谢谢配合!

文章点评

我来说两句 已有0条评论
点击图片更换

添加微信好友

添加微信好友

微信小程序

百度小程序