uni-app调用uni.connectSocket时连接失败未执行fail回调,仍执行success回调(误,请忽略)
uni-app调用uni.connectSocket时连接失败未执行fail回调,仍执行success回调(误,请忽略)
详细问题描述
(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)
[内容] 如题,详见附件截图。连接的url是个明显错误的地址,程序运行后日志任然打印“socket连接成功”。在H5和安卓机调试均可重现。
更多关于uni-app调用uni.connectSocket时连接失败未执行fail回调,仍执行success回调(误,请忽略)的实战教程也可以访问 https://www.itying.com/category-93-b0.html
哦,应该是我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事件监听。
建议修改代码结构:
- 移除对success/fail回调的依赖
- 改用事件监听方式:
let socketTask = uni.connectSocket({
url: '错误的地址'
});
socketTask.onOpen(res => {
console.log('实际连接成功');
});
socketTask.onError(err => {
console.log('连接错误', err);
});