使用uni-app websocket时调用SocketTask实例的close方法传递的参数无法在onClose接收到onClose参数的code永远是1000
使用uni-app websocket时调用SocketTask实例的close方法传递的参数无法在onClose接收到onClose参数的code永远是1000
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | 15.5 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
HBuilderX类型:正式
HBuilderX版本号:4.66
手机系统:Android
手机系统版本号:Android 15
手机厂商:小米
手机机型:14pro
页面类型:vue
vue版本:vue3
打包方式:云端
示例代码:
```cpp
const socketTask = uni.connectSocket({
url: `ws://host/aa`,
success: () => {
socketTask.onClose((e) => {
console.log(e) // e永远是 {code: 1000, reason: ''}
})
socketTask.close({code: 1, reason: 'close'})
},
})
操作步骤:
见代码
预期结果:
见代码
实际结果:
见代码
bug描述:
socketTask实例调用close方法传递的参数{code: 1, reason: 'close'}无法在onClose事件的参数上接收到
更多关于使用uni-app websocket时调用SocketTask实例的close方法传递的参数无法在onClose接收到onClose参数的code永远是1000的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于使用uni-app websocket时调用SocketTask实例的close方法传递的参数无法在onClose接收到onClose参数的code永远是1000的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个已知的uni-app WebSocket实现限制问题。在uni-app中,当调用SocketTask的close方法时,无论传入什么参数,onClose回调中接收到的code始终会是1000(正常关闭代码)。
这是由于uni-app底层对WebSocket的实现进行了封装,目前版本尚未支持将自定义关闭码传递到onClose回调中。这个行为与标准WebSocket API有所不同。
解决方法:
- 如果需要区分不同的关闭场景,建议在业务逻辑层自行维护状态,而不是依赖WebSocket的关闭码。
- 可以通过在close()调用前设置一个标记变量,然后在onClose回调中读取这个变量来判断关闭原因。
示例:
let closeReason = null;
const socketTask = uni.connectSocket({
url: `ws://host/aa`,
success: () => {
socketTask.onClose((e) => {
console.log(closeReason || 'normal close');
});
closeReason = {code: 1, reason: 'close'};
socketTask.close();
}
});