У меня есть простой сервис, называемый сокет-сервис
import { Injectable } from '@angular/core';
import { Socket } from 'ngx-socket-io';
import { AuthenticationService } from './authentication.service';
import { BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class SocketsService {
isConnected = false;
isOnline = new BehaviorSubject(false);
constructor(private socket: Socket,private authenticationService : AuthenticationService) {
}
connect(){
console.log("connecting to socket server....")
return new Promise((resolve, reject) => {
if(!this.isConnected)
{
this.socket.connect();
console.log("Authenticating socket server....")
this.socket.emit('authentication', {"HESOYAM" : this.authenticationService.user, "AEZAKMI" : this.authenticationService.pass, 'type' : 'mobile-app' });
this.isConnected=true;
this.socket.on("authenticated",function(data){
console.log("socket auth was succesful with data "+data);
console.log(this.isOnline);
//this.isOnline.next(true);
})
}
})
}
При выполнении this.isOnline.next(true);
возвращается ошибка, что isOnline не определено.
аналогично ведению журнала консоли this.isOnline
печатает неопределенное в консоли.
Я вызываю метод подключения со страницы
export class TabsPage implements OnInit {
constructor(private socketService : SocketsService, private authenticationService : AuthenticationService) { }
ngOnInit() {
this.authenticationService.refershToken().then(()=>{
this.socketService.connect()
})
}
}
токен обновления определен следующим образом
refershToken(){
return new Promise((resolve, reject) => {
this.storage.get(user).then((user) => {
this.storage.get(pass).then((pass) => {
if(user && pass){
console.log("refresing token")
this.login(user,pass).subscribe((res: LoginInterface) => {
if(res.auth == true){
this.save_login(user,pass,res.name,res.token)
this.user = user
this.pass = pass
resolve()
}else{
throw new Error('Auth Failed');
}
})
}
});
});
})
}
Полагаю, мне не хватает чего-то очень простого.
PS: я новичок в Typescript и Angular