问题
开发微信小程序,使用了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内
4 个回复
4***@qq.com (作者) - 主机电源开关工程师
忘了说,好像就微信小程序会出现这个,在H5环境下,setTimeout会正常触发close和socketOnClose,来个大佬给我点拨下吧
4***@qq.com (作者) - 主机电源开关工程师
再记录下,又定位到了问题,我们做的是一个订阅服务器通知然后调起支付的功能,在我发送消息后,到服务器返回消息成功前,调用socketTask对象的close方法,都无法关闭当前socket
接天莲叶
同样的问题有解决方法吗?
xcz1961
没有关闭