收藏
回答

全局使用SocketTask建立连接成功,SocketTask.onOpen不执行?

我在app.js中使用SocketTask创建socket连接,创建连接成功了,但是用SocketTask监听onOpen事件没有执行

我是在app.js执行onLaunch函数建立websocket连接,连接建立成功后,在登陆页面使用socketTask调用方法监听socket打开事件,没有执行,socketTask打印如下:

回答关注问题邀请回答
收藏

5 个回答

  • 恭喜发财
    恭喜发财
    2022-11-10

    我也遇到这个问题了,怎么解决,求助求助


    2022-11-10
    有用
    回复
  • 2022-03-06

    什么玩意更不不好使, var socket_ = uni.connectSocket({

    url: VUE_APP_WS_URL,

    success:e => {

    console.log(store.getters.webSocket)

    console.log(e)

    socket_.onOpen()

    }

    });

    这么写吗

    2022-03-06
    有用
    回复
  • 阿白
    阿白
    2022-01-12

    是的,先在wx.connectSocket的success里面判断成功后,再使用SocketTask进行后续操作。问题可以解决。


    2022-01-12
    有用
    回复
  • 阿白
    阿白
    2021-07-04

    不知道是我没看懂,还是这个设计有点2.。。

    socketTask需要wx.connectSocket操作才能返回,而connectSocket是异步进行websocket连接的。

    然后如果要在socketTask里面监听onOpen,那只能在wx.connectSocket之后才能有socketTask对象,当拿到这个sockeTask对象的时候,因为wx.connectSocket是异步执行,那么这时有可能websocket已经建立了,是否意味着此时再去调用socketTask.onOpen就收到不onOpen的消息了。而如果此时wx.connectSocket异步连接还没有建立,那此时调用socketTask.onOpen就能收到连接建立的回调。

    2021-07-04
    有用
    回复 4
    • 阿白
      阿白
      2021-07-04
      看了文档,这估计是为了做历史兼容而做的一个比较2的设计?
      因为按正常socket/websocket的设计,那应该是提供接口返回一个未连接的socket,然后再在socket里面进行onOpen、onClose以及connect等操作,这样就不会出现异步连接收不到onOpen了
      2021-07-04
      2
      回复
    • 阿谜
      阿谜
      2022-01-01
      我知道了,wx.connectSocket有一个success的回调,可以在这里面写连接成功的回调。
      2022-01-01
      回复
    • 慎独
      慎独
      2022-03-20回复阿谜
      能回调成功吗
      2022-03-20
      回复
    • 韩文博
      韩文博
      2022-10-20回复慎独
      不能,因为success后已经onOpen了,不会再触发onOpen
      2022-10-20
      回复
  • 老骆驼
    老骆驼
    发表于移动端
    2021-05-29
    丨L儿一…此。∴<丶:,…一…√辽w乙√∵…“:~↗∧乚八a:
    2021-05-29
    有用
    回复
登录 后发表内容
问题标签