首页 > 解决方案 > 当我在 Angular 中调用 API 后初始化套接字时,Websocket 不起作用

问题描述

我正在尝试websockets与 Angular 一起使用。

这是我的代码

ngOnInit(){
    const self = this;
    self.authService.init();
    self.socket = self.authService.getSocket();
    if(self.socket){
        self.socket.on("new-message", (data) => {
            console.log(data);
        });
    }
}

这工作得很好,每当数据发出时new-message,我都会在这里收到它。

但现在我改变了逻辑,只有当用户是authenticated. 这是我的新代码:

ngOnInit(){
    const self = this;
 this.authService.isUserAuthenticatedbyType().then(function(isAuthenticated){
        if(isAuthenticated){
            self.authService.init();
            self.socket = self.authService.getSocket();
            if(self.socket){
                self.socket.on("new-message", (data) => {
                console.log(data);
            });
        }
    });
}

在这里,isUserAuthenticatedbyType有一个 API 调用,它根据用户是否为authenticated.

现在,在authenticated用户的情况下,我的套接字已正确初始化,即使在发出消息后仍然没有收到消息。我不确定这两种方法之间出了什么问题。任何帮助将不胜感激。

标签: angularsocketswebsocket

解决方案


不确定,这实际上是问题所在,但你错过了一个大括号:

ngOnInit(){
    const self = this;
 this.authService.isUserAuthenticatedbyType().then(function(isAuthenticated){
        if(isAuthenticated){
            self.authService.init();
            self.socket = self.authService.getSocket();
            if(self.socket){
                self.socket.on("new-message", (data) => {
                console.log(data);
            });
            } // this one ends if(self.socket)
        }
    });
}

推荐阅读