1***@163.com
1***@163.com
  • 发布:2023-07-19 16:41
  • 更新:2023-10-11 08:11
  • 阅读:597

【报Bug】对uni.request自定义封装new Promise,然后通过async、await方式调用,会导致uni.showLoading和uni.hideLoading方法在手机端报错

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 21H2

第三方开发者工具版本号: 3.7.11.20230427

基础库版本号: 3.0.0

项目创建方式: CLI

CLI版本号: 3.0.0-alpha-3060720221018002

示例代码:
export const api = (url: string, reqData: object) => {  
    return new Promise((resolve) => {  
               uni.showLoading({  
                   title: "加载中"  
                })  
        uni.request({  
            url,  
            method: "POST",  
            data: reqData,  
            header: {  
                "from-source": "lowcode"  
            },  
            success: ({  
                data  
            }) => {  
                if (data.code === "0") {  
                    resolve(data.data)  
                } else {  
                    resolve({ err: true })  
                }  
            },  
            fail: (res) => {  
                console.log(res);  
                resolve({ err: true })  
            },  
            complete: () => {  
                           uni.hideLoading()  
            }  
        });  
    })  
}  

const data = await api('https://')

操作步骤:

如上代码示例

预期结果:

在真机端不会报错

实际结果:

在真机端提示:errMsg":"hideLoading:fail:toast can't be found"

bug描述:

代码如下:

export const api = (url: string, reqData: object) => {  
    return new Promise((resolve) => {  
               uni.showLoading({  
                   title: "加载中"  
                })  
        uni.request({  
            url,  
            method: "POST",  
            data: reqData,  
            header: {  
                "from-source": "lowcode"  
            },  
            success: ({  
                data  
            }) => {  
                if (data.code === "0") {  
                    resolve(data.data)  
                } else {  
                    resolve({ err: true })  
                }  
            },  
            fail: (res) => {  
                console.log(res);  
                resolve({ err: true })  
            },  
            complete: () => {  
                           uni.hideLoading()  
            }  
        });  
    })  
}  

const data = await api('https://')

在ios11手机上报错:errMsg":"hideLoading:fail:toast can't be found",如果改成wx.showLoading和wx.hideLoading(),则不会报错

2023-07-19 16:41 负责人:无 分享
已邀请:
Diligent_UI

Diligent_UI - 【插件开发】【专治疑难杂症】【多款插件已上架:https://ext.dcloud.net.cn/publisher?id=193663(微信搜索飘逸科技UI小程序直接体验)】【骗子请绕道】问题咨询请加QQ群:120594820,代表作灵感实用工具小程序

这个和封装pomise有啥关系呢,你在其他场景试试有没有报错

3***@qq.com

3***@qq.com

这个就是微信的锅,在ios,uni.showLoading后马上执行hideLoading就会报这个错误,报就让随他吧,不影响其他逻辑。硬是要解决,就延时执行hideLoading

1***@qq.com

1***@qq.com

改成 wx.hideLoading() 就不报了 解决了后 想到是uni问题 才搜到的这个帖子

套马杆的套子

套马杆的套子 - 没有解决不了的问题,只有解决不完的问题

延时几百毫秒

要回复问题请先登录注册