Не понимаю логику работы сервиса
Есть компонент начальной страницы, есть сервис к которому идет обращение при каждой загрузке стартовой страницы, который выдает IP пользователя. Проблема - если страницу перегрузить или зайти в первый раз, то IP undefined. Если перейти на любой другой компонент сайта и вернутся на стартовую, то все работает. Вот и вопрос - что я не понимаю и делаю не верно?
Компонент -
export class StartPageComponent implements OnInit {
constructor(private authService: AuthService) {
}
ngOnInit() {
this.authService.userSpy().subscribe();
}
}
Сервис -
@Injectable({
providedIn: 'root'
})
export class AuthService {
ipAddress: string;
constructor(private http: HttpClient) {
this.getUserIP();
}
userSpy() {
const userIPOptions = {
headers: new HttpHeaders({userIP: `${ this.ipAddress }`})
};
return this.http.post(environment.apiAuthUrl + Constants.USER_URL, {}, userIPOptions);
}
getUserIP() {
return this.http.get('https://jsonip.com/').subscribe((res: any) => {
this.ipAddress = res.ip;
});
}
}
Ответы (1 шт):
Проблема была в непонимании работы асинхронных методов. Запрос на бек отправлялся до получения данных о IP пользователя. Решил проблему создав сервис, который независимо получает данные об IP и записывает в sessionStorage:
@Injectable({
providedIn: 'root'
})
export class UserIpService {
constructor(private http: HttpClient) {
this.getUserIP();
}
getUserIP() {
this.http.get('https://jsonip.com/').subscribe((res: any) => {
sessionStorage.setItem('userIP', JSON.stringify(res.ip));
});
}
}
А уже после этого использую этот сервис в компонентах c таймаутом.