uniapp请求超时处理
请求超时处理的常见方法
在UniApp中处理请求超时问题,可以通过以下几种方式实现:
设置全局请求超时时间
在main.js中配置全局请求超时时间,适用于所有使用uni.request发起的请求:
uni.$http.setConfig((config) => {
config.timeout = 10000 // 10秒超时
return config
})
单个请求设置超时时间 针对特定请求单独设置超时时间:
uni.request({
url: 'https://example.com/api',
timeout: 5000, // 5秒超时
success: (res) => {},
fail: (err) => {}
})
使用Promise封装超时处理 结合Promise实现更灵活的超时控制:
function requestWithTimeout(url, data, timeout = 8000) {
return new Promise((resolve, reject) => {
const timer = setTimeout(() => {
reject(new Error('请求超时'))
}, timeout)
uni.request({
url,
data,
success: (res) => {
clearTimeout(timer)
resolve(res.data)
},
fail: (err) => {
clearTimeout(timer)
reject(err)
}
})
})
}
拦截器处理超时错误 通过拦截器统一处理超时错误:
uni.addInterceptor('request', {
fail(err) {
if (err.errMsg.includes('timeout')) {
uni.showToast({
title: '网络请求超时',
icon: 'none'
})
}
}
})
重试机制实现 对于重要请求可添加重试逻辑:
async function requestWithRetry(url, retryCount = 2) {
try {
return await requestWithTimeout(url)
} catch (error) {
if (retryCount > 0 && error.message.includes('timeout')) {
return requestWithRetry(url, retryCount - 1)
}
throw error
}
}
注意事项
网络状态检测应在发起请求前进行,可使用uni.getNetworkType检查网络状况。超时时间设置需根据实际网络环境和接口响应时间合理调整,通常建议8-15秒范围。对于大文件上传等特殊场景,需要适当延长超时时间或使用分片上传策略。







