uni-app调用uni.connectSocket时连接失败未执行fail回调,仍执行success回调(误,请忽略)

uni-app调用uni.connectSocket时连接失败未执行fail回调,仍执行success回调(误,请忽略)

详细问题描述

(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)

[内容] 如题,详见附件截图。连接的url是个明显错误的地址,程序运行后日志任然打印“socket连接成功”。在H5和安卓机调试均可重现。

https:https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20190731/621a7ea2dea5a5197e99171b931bb1dd.png

https:https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20190731/2581a469f26befa5081cf126ce172bc0.png


更多关于uni-app调用uni.connectSocket时连接失败未执行fail回调,仍执行success回调(误,请忽略)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

哦,应该是我api理解错了,只是api调用成功,不是连接成功

更多关于uni-app调用uni.connectSocket时连接失败未执行fail回调,仍执行success回调(误,请忽略)的实战教程也可以访问 https://www.itying.com/category-93-b0.html


那我们应该怎么去解决

怎么解决了

我擦,这是这样的,太坑爹啦,啦机啊 uni.connectSocket({ url: _data.data(‘socket_url’), header: { ‘content-type’: ‘application/json’, }, // protocols: [ ‘protocol1’ ], method: ‘GET’, success(){ console.log(‘connectSocket=socket_state设置为1:’+_data.data(‘socket_url’)); _data.data(‘socket_state’,1); }, fail(err){ self.$reset().$reconnect(); } });
网络都没有居然 success(

咱俩代码是一样的,你的问题解决了没有

没解决啊

根据描述和截图分析,问题可能出在WebSocket连接状态的判断机制上。uni.connectSocket的success回调仅表示API调用成功,不代表连接已建立。实际连接状态需要通过onOpen/onError事件监听。

建议修改代码结构:

  1. 移除对success/fail回调的依赖
  2. 改用事件监听方式:
let socketTask = uni.connectSocket({
  url: '错误的地址'
});

socketTask.onOpen(res => {
  console.log('实际连接成功');
});

socketTask.onError(err => {
  console.log('连接错误', err);
});
回到顶部