【发布时间】:2019-04-21 02:24:29
【问题描述】:
我正在尝试将 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 返回一个布尔 Promise。
现在,在authenticated 用户的情况下,我的套接字已正确初始化,即使发出消息后仍然没有收到消息。我不确定这两种方法之间出了什么问题。任何帮助将不胜感激。
【问题讨论】:
-
你应该有 init 在 const self = this;
-
ngOnInit() 仅在初始化时运行。如果在初始化时
isAuthenticated为假,那么代码将不会再次运行。您需要有一种方法来跟踪isAuthenticated的更改。