Вы можете настроить свою подписку следующим образом:
this.proposalSubscription = this._posts.retrieveProposals(user.uid)
.pipe(
switchMap(proposals => {
//if you need to save it in class variable you can save it like this
this.proposals = proposals;
const obs$ = proposals.map(p => {
return this._chat.retrieveChat(p.id)
.pipe(
map(chat => {
this.chats.set(p,id, chat);
})
)
});
return forkJoin(obs$);
})
)
.subscribe();
Вы можете составить свою цепочку операторов по своему желанию и иметь только одну подписку.
В ngOnDestory
отмените подписку следующим образом:
ngOnDestroy() {
if(this.proposalSubscription) {
this.proposalSubscription.unsubscribe()
}
}
Вы можете избежать явного unsubscribe
в ngOnDestroy
и поддерживать экземпляр Subscription
, используя take(1)
, если вы ожидаете оценить this._posts.retrieveProposals(user.uid)
наблюдаемый только один раз , например так:
this._posts.retrieveProposals(user.uid)
.pipe(
take(1),
switchMap(proposals => {
//if you need to save it in class variable you can save it like this
this.proposals = proposals;
const obs$ = proposals.map(p => {
return this._chat.retrieveChat(p.id)
.pipe(
map(chat => {
this.chats.set(p,id, chat);
})
)
});
return forkJoin(obs$);
}),
)
.subscribe();