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

新手上路,请多包涵
    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了

阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题