uni-app uni.connectSocket在鸿蒙系统下 readyState undefined

uni-app uni.connectSocket在鸿蒙系统下 readyState undefined

示例代码:

let wsObj = uni.connectSocket({  
    url: url,  
    success: () => {  
        console.log("WebSocket 连接成功");  
    },  
    fail: (err) => {  
        console.error("WebSocket 连接失败", err);  
    },  
});  
console.log(wsObj.readyState)

操作步骤:

  • 复制代码在鸿蒙模拟器运行

预期结果:

  • readyState 正确显示

实际结果:

  • 显示undefined

bug描述:

uni.connectSocket在鸿蒙系统下 readyState 一直是undefined,截图如下分别为在内置浏览器,和鸿蒙模拟器下面的结果,并且 console.log(wsObj.readyState) 会早于链接成功先执行,即便增加延迟还是undefined

Image 1

Image 2


更多关于uni-app uni.connectSocket在鸿蒙系统下 readyState undefined的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

该bug反馈内容基本完整但存在关键缺失:标题和描述清晰说明了鸿蒙系统下uni.connectSocket的readyState为undefined的问题,提供了代码示例和复现步骤,但未明确区分是uni-app标准版还是uni-app x项目(虽提及Vue3,但两者均支持)。分类信息中HBuilderX 4.87版本号有效,但"HarmonyOS 6.0.0"版本号格式异常(当前公开鸿蒙版本无此命名),且未说明模拟器API级别是否≥12(知识库要求真机需API 12+)。
bug不成立,属使用方式问题。知识库明确说明:

WebSocket API兼容性标注HarmonyOS支持从HBuilderX 4.23开始
关键提示"注意:真机需要鸿蒙系统版本 API 12 以上"
uni-app在鸿蒙平台采用独立JSVM线程(知识库说明),导致异步行为与Web环境不同

用户代码在连接建立前立即访问readyState是主因。标准WebSocket规范中,创建连接对象后readyState应为0(CONNECTING),但uni-app鸿蒙实现可能延迟初始化。正确做法应通过onOpen回调确认连接状态,而非直接读取readyState。建议用户:

确保使用API 12+的鸿蒙环境
改用onOpen/onError事件监听状态
参考鸿蒙调试指南进行真机验证

此属概念性误区,非代码缺陷,无需修复。 内容为 AI 生成,仅供参考

更多关于uni-app uni.connectSocket在鸿蒙系统下 readyState undefined的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙系统下,uni.connectSocket 返回的 wsObjreadyStateundefined,这确实是当前版本的一个已知问题。主要原因是鸿蒙平台的 WebSocket 实现与标准 WebSocket API 存在差异,导致 readyState 属性未正确暴露。

问题分析:

  1. 异步连接机制uni.connectSocket 在调用后立即返回一个 WebSocket 对象,但此时连接尚未建立。readyState 需要等待连接状态变更后才会被正确赋值。在鸿蒙平台,由于底层实现差异,该属性可能未被初始化或同步更新。
  2. 平台兼容性:鸿蒙系统的 WebSocket 实现可能未完全遵循 W3C 标准,导致 readyState 属性无法直接访问。

临时解决方案:

  • 使用事件监听替代直接访问:不要直接依赖 wsObj.readyState,而是通过 WebSocket 事件(如 onOpenonErroronClose)来监听连接状态。
    let wsObj = uni.connectSocket({
        url: url,
        success: () => {
            console.log("WebSocket 连接成功");
        },
        fail: (err) => {
            console.error("WebSocket 连接失败", err);
        },
    });
    
    wsObj.onOpen(() => {
        console.log("连接已打开,此时可安全操作 WebSocket");
    });
    
    wsObj.onError(() => {
        console.error("连接发生错误");
    });
回到顶部