Есть 2 пункта, которые вы можете улучшить:
1 - Не используйте вложенные подписки, так как это не рекомендуется для Rx JS. Например, вы можете использовать оператор combineLatest
:
ngOnInit() {
combineLatest([this.authService.userId, this.conversationsService.fetchConversations()])
.pipe(takeUntil(this.destroy$))
.subscribe(([userId, loadedConversations]) => {
console.log('UserId', userId);
this.loadedConversations = loadedConversations.filter(
conversation =>
conversation.userId === userId || conversation.mechanicId === userId
);
console.log('Loaded Conversations', this.loadedConversations);
}
}
// ionViewWillEnter() has been removed, as we embed the call in combineLatest
combineLatest
, ожидающий, что обе наблюдаемые величины будут иметь значение. В противном случае вы можете использовать оператор withLatestFrom()
, если вы заинтересованы в извлечении только самого последнего значения одной из 2 наблюдаемых (например, Auth Service).
2 - В случае, если код находится в компоненте, вы Не забудьте отписаться от obervables, чтобы избежать утечек памяти. Например, вы можете использовать оператор takeUntil(this.destroy$)
и тему, которую вы вызываете в хуке компонента onDestroy:
private destroy$ = new Subject<boolean>();
ngOnDestroy() {
this.destroy$.next(true);
}