在js的回调函数中执行websocket订阅,发现回调的函数变了

发布于 2022-09-13 01:26:22 字数 1546 浏览 17 评论 0

    test()

    test(){
        this.subscribe('/topic/event', function (res){
          //todo(function ()
          console.log(111)
        })
        this.subscribe('/topic/screen', function (res){
          //todo
          console.log(222)
        })
    }

    subscribe(topic,callback){
      try {
        // setTimeout(() => {
        //   console.log("123")
        //   callback(123)
        // },2500)
        this.stompClient.subscribe(topic, (msg) => { // 订阅服务端提供的某个topic
          let topic1 = topic
          console.log('接收广播消息:' + topic1 + ':' + msg.body) // msg.body存放的是服务端发送给我们的信息
          callback(msg.body)
        },this.headers);
      } catch (err) {
        console.log("websocket断线了: " + err);
      }
    },

在实际执行test时,在一个函数同时对subcribe进行调用,理想的情况是不同的topic执行不同的callback,this.subscribe('/topic/event'这一个websocket的订阅,其理想的回调是执行console.log(111),但实际上最后回调执行的是function (res){console.log(222)})。
网上找了一圈,也没找到解决方案。

    subscribe(topic,callback){
      try {
         setTimeout(() => {
           console.log("123")
           callback()
         },2500)
         //this.stompClient.subscribe(topic, (msg) => { // 订阅服务端提供的某个topic
         //let topic1 = topic
         // console.log('接收广播消息:' + topic1 + ':' + msg.body) // msg.body存放的是服务端发送给我们的信息
         // callback(msg.body)
         //},this.headers);
      } catch (err) {
        console.log("websocket断线了: " + err);
      }
    },

最气人的是如果我代码里面的是setTimeout,这时启动test()函数时,控制台就能按顺序打印123、111、123、222了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文