Вы ссылаетесь на значение данных, возвращаемых из stateService.getLanguage () (возможно) до того, как getLanguage () вернул значение.
Убедитесь, что this.lang имеет значение, сделав ваш вызов getContentfulEntry() в вашей подписке на getLanguage ().Это гарантирует, что this.lang будет иметь значение при вызове getContentfulEntry ()
this.langSubscription = this.stateService.getLanguage()
.subscribe(val => {
this.lang = val;
this.subscription = this.contentfulService.getContentfulEntry(this.footerEntryId, { locale: this.lang.toLowerCase() })
.subscribe(res => {
console.log('Footer Entries:: ', res);
// this.contentfulData = res;
this.filteredFooter = this.contentfulService.getFilteredEntryByProv(res, this.prov);
console.log('Filtered Footer:: ', this.filteredFooter);
});
});
. Вы также можете рассмотреть возможность присвоения возвращаемого значения из getLanguage () для BehaviorSubject (из rxjs), котороедействует как наблюдаемый.Вы можете подписаться на свой BehaviorSubject, который будет выдавать значение каждый раз, когда назначается новое значение.Я упоминаю субъекты поведения как способ управления параметрами, которые могут изменяться с течением времени, но не считаю это решение наилучшей практикой в данном случае использования.
lang = new BehaviorSubject<string>('');
this.langSubscription = this.stateService.getLanguage()
.subscribe(val => {
// this.lang will emit the next assigned value "val"
this.lang.next(val);
});
// subscribe to emitted value from this.lang
this.lang.subscribe(val => {
this.subscription = this.contentfulService.getContentfulEntry(this.footerEntryId, { locale: this.lang.getValue().toLowerCase() })
.subscribe(res => {
console.log('Footer Entries:: ', res);
// this.contentfulData = res;
this.filteredFooter = this.contentfulService.getFilteredEntryByProv(res, this.prov);
console.log('Filtered Footer:: ', this.filteredFooter);
});
});