当前位置:首页 > uni-app

uniapp请求超时处理

2026-01-13 18:33:37uni-app

uniapp请求超时处理方法

在uniapp中处理请求超时可以通过多种方式实现,以下是几种常见的处理策略:

设置全局请求超时时间

main.js中配置全局请求超时时间,适用于所有请求:

uni.$http.setConfig((config) => {
    config.timeout = 10000 // 10秒超时
    return config
})

单个请求设置超时

在具体请求中单独设置超时时间:

uni.request({
    url: 'https://example.com/api',
    timeout: 5000, // 5秒超时
    success: (res) => {},
    fail: (err) => {
        if(err.errMsg.includes('timeout')) {
            uni.showToast({title: '请求超时', icon: 'none'})
        }
    }
})

使用拦截器处理超时

通过请求拦截器统一处理超时错误:

uni.$http.interceptors.request.use(
    (config) => {
        config.timeout = 8000 // 8秒超时
        return config
    },
    (error) => {
        return Promise.reject(error)
    }
)

uni.$http.interceptors.response.use(
    (response) => {
        return response
    },
    (error) => {
        if(error.errMsg.includes('timeout')) {
            uni.showModal({
                title: '提示',
                content: '网络请求超时,请重试'
            })
        }
        return Promise.reject(error)
    }
)

重试机制实现

对于超时请求可以实现自动重试逻辑:

function requestWithRetry(url, data, retryCount = 3) {
    return new Promise((resolve, reject) => {
        const doRequest = (attempt) => {
            uni.request({
                url,
                data,
                timeout: 3000,
                success: resolve,
                fail: (err) => {
                    if(err.errMsg.includes('timeout') && attempt < retryCount) {
                        doRequest(attempt + 1)
                    } else {
                        reject(err)
                    }
                }
            })
        }
        doRequest(1)
    })
}

网络状态检测

在发起请求前先检测网络状态:

uni.getNetworkType({
    success: (res) => {
        if(res.networkType === 'none') {
            uni.showToast({title: '网络不可用', icon: 'none'})
            return
        }
        // 正常发起请求
    }
})

显示加载状态

结合加载提示改善用户体验:

let timer = setTimeout(() => {
    uni.hideLoading()
    uni.showToast({title: '请求超时', icon: 'none'})
}, 10000)

uni.showLoading({title: '加载中'})
uni.request({
    url: 'https://example.com/api',
    complete: () => {
        clearTimeout(timer)
        uni.hideLoading()
    }
})

以上方法可以根据实际需求组合使用,建议在项目中统一处理超时逻辑,避免重复代码。对于重要请求可以适当延长超时时间,对于非关键请求可以设置较短超时并配合重试机制。

uniapp请求超时处理

标签: uniapp
分享给朋友:

相关文章

uniapp应用市场

uniapp应用市场

uniapp应用市场概述 Uniapp作为跨平台开发框架,支持将代码编译到iOS、Android、Web及各类小程序平台。其应用市场(插件市场)是开发者获取扩展插件、模板、组件的重要资源库,涵盖UI组…

uniapp发布到应用商店

uniapp发布到应用商店

发布到苹果App Store 确保开发者账号已注册并加入Apple Developer Program,年费99美元。在Xcode中生成iOS发布证书(.p12)和描述文件(Provisioning…

uniapp实现懒加载

uniapp实现懒加载

uniapp实现懒加载的方法 在uniapp中实现懒加载可以通过多种方式,以下是几种常见的方法: 使用uni.lazyLoad组件 uniapp提供了内置的懒加载组件,适用于图片等资源的懒加载。在页…

uniapp 如何封装request请求

uniapp 如何封装request请求

封装 request 请求的核心思路 在 UniApp 中封装请求通常基于 uni.request,通过统一处理 URL、参数、header 和拦截逻辑提升代码复用性。以下是一个完整封装方案: 创…

uniapp可以用vant吗

uniapp可以用vant吗

uniapp中使用Vant组件库的可行性 Vant是专为Vue.js设计的移动端组件库,而uniapp是一个跨平台开发框架。两者并非原生兼容,但可通过以下方式实现部分Vant组件的使用。 方法一:…

引擎uniapp

引擎uniapp

uniapp 引擎概述 uniapp 是一个基于 Vue.js 的跨平台开发框架,允许开发者使用单一代码库构建多端应用(如 iOS、Android、Web、小程序等)。其核心引擎通过条件编译和运行时适…