孤竹
孤竹
  • 发布:2025-07-29 10:33
  • 更新:2026-04-01 11:58
  • 阅读:490

【报Bug】scoketTask close 参数无效

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 4.75

手机系统: Android

手机系统版本号: Android 15

手机厂商: vivo

手机机型: iqoo11s

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
const socketTask = uni.connectSocket({  
                    url: 'wss://cms-dev.lanmaocard.com/test-api/websocket/111211',  
                    complete: ()=> {}  
                });  

                socketTask.onClose(e => {  
                    console.log(e);  
                })  

                setTimeout(() => {  
                    socketTask.close({code: 4001, reason: "主动关闭"})  
                }, 3000)

操作步骤:
const socketTask = uni.connectSocket({  
                    url: 'wss://cms-dev.lanmaocard.com/test-api/websocket/111211',  
                    complete: ()=> {}  
                });  

                socketTask.onClose(e => {  
                    console.log(e);  
                })  

                setTimeout(() => {  
                    socketTask.close({code: 4001, reason: "主动关闭"})  
                }, 3000)

预期结果:

onClose 正确失败到 关闭时传入的 code reason

实际结果:

onClose code固定为 1000 reason 为空

bug描述:

scoketTask close 时传入 code , reason 参数无效, onClose 监听到的参数 固定为 code 1000

2025-07-29 10:33 负责人:DCloud_Android_THB 分享
已邀请:
DCloud_Android_THB

DCloud_Android_THB

这个onclose里面的reason是服务端关闭时给你发的,你本地close是发送给服务端的。

  • 孤竹 (作者)

    好吧, 小程序 h5 客户端 close 都是可以正常触发 onClose的,参数也正常能收到

    2025-08-01 14:11

  • DCloud_Android_THB

    回复 孤竹: 不应该吧? 客户端的onclose也是接收服务端返回的信息,客户端主动关闭,没必要把reason回调给onClose

    2025-08-01 15:52

  • 孤竹 (作者)

    回复 DCloud_Android_THB: onClose 时会处理重连,然后主动close时传入了 code, onClose收到是这个code 就不在重连了

    2025-08-01 15:59

  • DCloud_Android_THB

    回复 孤竹: 听起来你这个状态是客户端维护的,服务端给你发code是另外的逻辑。

    2025-08-04 11:14

  • 前端码农boy

    回复 DCloud_Android_THB: 这个问题我也遇到了,小程序确实是好的,app不行。应该是微信处理了,只不过小程序有限制,传入的code必须在3000-4999之间才行。

    2026-04-01 11:55

前端码农boy

前端码农boy - 前端爱好者

this.ws?.close({ code: MANUAL_CLOSE_CODE, reason: '用户主动断开' });  

this.ws.onClose((res) => {  
      console.log('WebSocket 连接关闭', res);  
      // 手动断开,不需要重连  
      if (res && res.code === MANUAL_CLOSE_CODE) {  
        return  
      }  
      this._scheduleReconnect();  
    });

以上代码,在小程序上是可以的,在app上onClose收到的code一直是1000,而且还收不到reason,reason一直是空字符串

要回复问题请先登录注册