Показать сообщение отдельно
  #1 (permalink)  
Старый 30.12.2019, 01:04
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 79

Сколько раз запускается конструктор сервиса?
Всегда считал, что если объявить сервис на уровне главного модуля приложения и добавить к нему 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. Как синхронно прочитать данные с бэка из сервиса, чтобы приложение тормознуло, пока все не считается и потом работать с этими натройками.
Ответить с цитированием