首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >X事件总线客户端在构造函数外部的角7中不工作

X事件总线客户端在构造函数外部的角7中不工作
EN

Stack Overflow用户
提问于 2019-11-19 16:05:04
回答 1查看 295关注 0票数 1

我尝试在我的角度web项目中使用vertx-eventbus client.js3.8.3。下列各项运作良好:

代码语言:javascript
复制
declare const EventBus: any;`

@Injectable({`
    providedIn: 'root'
})
export class DeviceService implements OnInit {

    constructor(private httpClient: HttpClient) {

       var eb = new EventBus("http://127.0.0.1:8080/eventbus");

       eb.onopen = function() {

          eb.registerHandler("events-feed", function(error, message) {
              console.log("Message: " + message.body);
          });

          eb.registerHandler("receiver", function(error, message) {
             console.log('Message: ' + message.body);
          });

          eb.publish("events-feed", "Test", function (error, message) {
              console.log(JSON.parse(message.body));
          });
      }

    }



}

将建立到后端的连接,并通过registerHandler方法接收消息。但是当我用这样的函数移动代码时:

代码语言:javascript
复制
private eb : any;

initializeEventBus() {


 this.eb = new EventBus("http://127.0.0.1:8080/eventbus");

       this.eb.onopen = function() {

          this.eb.registerHandler("events-feed", function(error, message) {
              console.log("Message: " + message.body);
          });

          this.eb.registerHandler("receiver", function(error, message) {
             console.log('Message: ' + message.body);
          });

          this.eb.publish("events-feed", "Test", function (error, message) {
              console.log(JSON.parse(message.body));
          });
      }

    }

}

它出错并引发以下错误:

代码语言:javascript
复制
core.js:14597 ERROR TypeError: Cannot read property 'registerHandler' of undefined
    at EventBus.DeviceService.eb.onopen (device.service.ts:28)
    at w.self.sockJSConn.onopen (vertx-eventbus.js:121)
    at w.r.dispatchEvent (eventtarget.js:51)
    at w._open (main.js:320)
    at w._transportMessage (main.js:253)
    at u.i.emit (emitter.js:50)
    at WebSocket.ws.onmessage [as __zone_symbol__ON_PROPERTYmessage] (websocket.js:35)
    at WebSocket.wrapFn (zone.js:1332)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
    at Object.onInvokeTask (core.js:16147)

你知道我做错了什么吗?

问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-19 16:13:29

因为您使用的是这个关键字,所以它不会被绑定。要使它工作,您需要使用箭头函数,如下所示。

代码语言:javascript
复制
this.eb.onopen = () => {

          this.eb.registerHandler("events-feed", (error, message) => {
              console.log("Message: " + message.body);
          });

          this.eb.registerHandler("receiver",  (error, message) => {
             console.log('Message: ' + message.body);
          });

          this.eb.publish("events-feed", "Test",  (error, message) => {
              console.log(JSON.parse(message.body));
          });
      }

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58938273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档