Всегда считал, что если объявить сервис на уровне главного модуля приложения и добавить к нему providedIn: 'root', то данный клас принимается приложением как синглтон и инициируется единожды. Т.е. конструктор данного класса запустится 1 раз на протяжении жизни приложения. Но при реализации сервиса SettingService, который должен кормить все приложение глобальными настройками получилась какая-то чушь.
@Injectable({
providedIn: 'root'
})
export class SettingService {
constructor() {
console.log("Go!");
}
}
В этом случае, как и предполагалось, в консоль будет выведено Go! 1 раз.
Но, если изменить конструктор так:
constructor(
private http: HttpClient,
private $MSG: MsgList,
public $NOTE: NotificationsService
) {
const globalVars = new GlobalVars();
this.data = globalVars.cloneData();
console.log("Go!");
this.http.get<any[]>('http://api.com/preferenses')
.subscribe( (data: any[]) => {
console.log(data);
});
}
То надпись Go! выводится 272 раза. Вероятно имеется связь между количеством компонентов в приложении, которые подключают этот сервис и количеством вызовов. При этом понятно, что вызов бэка асинхронный и пойди пойми, чем занимается приложение, пока мы читаем данные.
Тут 2 вопроса:
1. Почему меняется поведение конструктора.
2. Как синхронно прочитать данные с бэка из сервиса, чтобы приложение тормознуло, пока все не считается и потом работать с этими натройками.