uni-app开发iOS应用调用uni.request api ios26版本持续请求超时

uni-app开发iOS应用调用uni.request api ios26版本持续请求超时

操作步骤:

  • 调用uni.request api,请求头中添加Authorization与不添加Authorization反复测试

预期结果:

  • 请求头中添加Authorization也应当正常返回结果

实际结果:

  • 请求头中添加Authorization后,接口一直loading

bug描述:

uniapp开发iOS应用,iOS26版本,使用uni.request api进行接口请求, 若请求头中存在Authorization,则请求会一直loading,若不存在则请求正常。26版本以下没有问题。 所有接口请求都为https

开发环境 版本号 项目创建方式
PC开发环境 Windows
PC开发环境版本号 window11
HBuilderX Alpha
HBuilderX版本号 4.76
手机系统 iOS
手机系统版本号 iOS 26
手机厂商 苹果
手机机型 iphone17promax
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

更多关于uni-app开发iOS应用调用uni.request api ios26版本持续请求超时的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

提供实际工程说明具体问题

更多关于uni-app开发iOS应用调用uni.request api ios26版本持续请求超时的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题目前只在ios26版本手机上复现过,iphone17系列手机复现较多,我是自己封装了一个request请求文件,如登录等不需要Authorization的接口可以正常调用,登录成功之后,接口请求头会添加Authorization,这种情况下uni.request发起的请求,无论是success、fail还是complete都无法进入,自己封装的request文件放在下边的回答里了

const request = async (options) => {
console.log(options.url);
// 处理请求头
let headers = {
…options.header,
“tenant-id”: 1
};
// console.log(headers);
headers = await handleHeader(headers, options.noAuth);
console.log(headers.Authorization)
let ownOptions = {
…options,
ifReject: options.ifReject || false,
header: headers
}

if (ownOptions.showLoad) {}  

return new Promise((resolve, reject) => {  
    uni.request({  
        ...ownOptions,  
        success: (res) => {  
            const errMsg = '网络繁忙,请稍后重试';  
            if (res.statusCode !== 200) {  
                const data = res.data  
                if (res.statusCode == '400') {  
                    uni.showModal({  
                        title: '提示',  
                        content: errMsg,  
                        success(res) {}  
                    })  
                }  
                if (res.statusCode == '500') {  

                    uni.showModal({  
                        title: '提示',  
                        content: '网络繁忙,请稍后重试',  
                        success(res) {}  
                    })  
                }  
                if (res.statusCode == '401') {  
                    if (!isRefreshing) {  
                        isRefreshing = true  
                        getRefreshToken().then(newToken => {  
                            // console.log('token----------', newToken)  
                            isRefreshing = false  

                            requests.forEach(callback => callback(newToken))  
                            requests = []  

                            ownOptions.header.Authorization =  
                                `Bearer ${newToken}`;  
                            uni.request({  
                                ...ownOptions,  
                                success: (res) => {  
                                    if (res.statusCode == 200) {  
                                        resolve(res.data)  
                                    } else {  
                                        reject(res)  
                                    }  
                                }  
                            })  
                        }).catch((err) => {  
                            console.error(err)  

                            uni.showModal({  
                                title: '提示',  
                                content: '登录超时,请重新登录',  
                                success(res) {  
                                    reject('token刷新失败')  
                                    isRefreshing = false  
                                    uni.removeStorageSync('token')  
                                    uni.removeStorageSync(  
                                        'refreshToken')  
                                    uni.setStorageSync('ifLogin', false)  
                                    uni.removeStorageSync('userInfo')  
                                    uni.reLaunch({  
                                        url: '/pages/login/index'  
                                    })  
                                }  
                            });  
                        })  
                    } else {  
                        requests.push((newToken) => {  
                            ownOptions.header.Authorization =  
                                `Bearer ${newToken}`;  
                            uni.request({  
                                ...ownOptions,  
                                success(res) {  
                                    if (res.statusCode == 200) {  
                                        resolve(res.data)  
                                    } else {  
                                        reject(res)  
                                    }  
                                }  
                            })  
                        })  
                    }  

                }  
                reject(res)  
            } else {  
                const result = res.data  
                const code = result.code  
                if (code == 401) {  
                    if (!isRefreshing) {  
                        isRefreshing = true  
                        getRefreshToken().then(newToken => {  
                            isRefreshing = false  

                            requests.forEach(callback => callback(newToken))  
                            requests = []  

                            ownOptions.header.Authorization =  
                                `Bearer ${newToken}`;  
                            uni.request({  
                                ...ownOptions,  
                                success: (res) => {  
                                    if (res.statusCode == 200) {  
                                        resolve(res.data)  
                                    } else {  
                                        reject(res)  
                                    }  
                                }  
                            })  
                        }).catch((err) => {  
                            console.error(err)  

                            uni.showModal({  
                                title: '提示',  
                                content: '登录超时,请重新登录',  
                                success(res) {  
                                    reject('token刷新失败')  
                                    isRefreshing = false  
                                    uni.removeStorageSync('token')  
                                    uni.removeStorageSync(  
                                        'refreshToken')  
                                    uni.setStorageSync('ifLogin', false)  
                                    uni.removeStorageSync('userInfo')  
                                    uni.reLaunch({  
                                        url: '/pages/login/index'  
                                    })  
                                }  
                            });  
                        })  
                    } else {  
                        requests.push((newToken) => {  
                            ownOptions.header.Authorization =  
                                `Bearer ${newToken}`;  
                            uni.request({  
                                ...ownOptions,  
                                success(res) {  
                                    if (res.statusCode == 200) {  
                                        resolve(res.data)  
                                    } else {  
                                        reject(res)  
                                    }  
                                }  
                            })  
                        })  
                    }  
                } else {  
                    resolve(res.data);  
                }  
            }  
        },  
        fail: (error) => {  
            console.error('报错进来了 ');  
            console.error(error)  
            uni.showToast({  
                title: '网络异常,请稍后重试',  
                icon: 'none'  
            })  
            if (options.ifReject) {  
                reject(error)  
            }  
        },  
        complete: (res) => {  

        }  
    })  
})  

}

export default request;

提供一个可以直接运行的示例工程吧便于排查

回复 DCloud_iOS_XHY: 已在下方评论添加示例工程,辛苦帮忙排查下吧

示例工程

回到顶部