4***@qq.com
4***@qq.com
  • 发布:2020-09-19 12:53
  • 更新:2023-07-28 11:11
  • 阅读:1851

【报BUG】uni.closeSocket()未正常触发uni.onSocketClose

分类:uni-app

问题

开发微信小程序,使用了uni.connectSocket(),在调用uni.closeSocket()后,success回调成功,但uni.onSocketClose()的回调函数并未被触发

代码展示

vm.mySk = uni.connectSocket({  
                   url: urls.socket,  
                   fail: function () { // socket打开失败  
                    uni.showToast({  
                        icon: 'none',  
                        title: vm._i18n.messages[vm.lang].train.makeOrderFail  
                    })  
                    vm.btnLoading = false  
                }  
        });  
                vm.mySk.onOpen(function(res) {  
                    vm.skOpen = true  
                    if (vm.skOpen) {  
                        vm.mySk.send({  
                            data: JSON.stringify(order) // order是发送给服务器的消息  
                        });  
                        // 开启定时!!!!  
                        vm.skTimeout = setTimeout(() => {  
                            if (!vm.commitSuccess) { // 没有收到返回  
                                console.log(vm.mySk)  
                                vm.skOpen = false  
                                vm.mySk.close({  
                                    code: 1000,  
                                    reason: '未接收到服务器返回超时关闭',  
                                                                        success: suc => {  
                                                                            console.log('超时关闭socket')  
                                                                        }  
                                }) // 超时,关闭socket  
                            }  
                        }, 5000)  
                    }  
                });  
                vm.mySk.onMessage(function (res) {  
                  vm.skOnMessage(res)  
                });  
                vm.mySk.onClose(function (res) {  
                                        debugger  
                    uni.hideLoading()  
                        vm.skCloase(res)  
                });  
                vm.mySk.onError(function(err){  
                    console.log(err)  
                })

问题描述

我在onOpen()的回调函数内设置了定时5秒关闭,期望结果是5秒后触发onClose()内的debugger,实际结果是,控制台打印了
‘超时关闭socket’,但并未触发debugger,而是在两分钟后,才进入到debugger内

2020-09-19 12:53 负责人:无 分享
已邀请:
4***@qq.com

4***@qq.com (作者) - 主机电源开关工程师

忘了说,好像就微信小程序会出现这个,在H5环境下,setTimeout会正常触发close和socketOnClose,来个大佬给我点拨下吧

4***@qq.com

4***@qq.com (作者) - 主机电源开关工程师

再记录下,又定位到了问题,我们做的是一个订阅服务器通知然后调起支付的功能,在我发送消息后,到服务器返回消息成功前,调用socketTask对象的close方法,都无法关闭当前socket

接天莲叶

接天莲叶

同样的问题有解决方法吗?

2***@qq.com

2***@qq.com

没有关闭

要回复问题请先登录注册