Websocket не работает, когда я инициализирую сокет после вызова API в Angular - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь использовать 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, мой сокет инициализирован правильно, все еще никакое сообщение не получено даже после отправки сообщения.Я не уверен, что пошло не так между этими двумя подходами.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Попробуйте вернуть наблюдаемое из isUserAuthenticatedbyType(), а затем подпишитесь на него.Затем вы можете отслеживать isAuthenticated изменения.

ngOnInit(){
  const self = this;
  this.authService.isUserAuthenticatedbyType()
    .subscribe((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)
    }
  });
}
0 голосов
/ 20 ноября 2018

Не уверен, что это действительно проблема, но вы пропустили фигурную скобку:

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)
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...