Я использую ngrx и хочу убедиться, что обе подписки в моем ngOnInit () завершены, прежде чем я проверю условия и вызову методы, основанные на этих условиях.
Мой код выглядит следующим образом:
ngOnInit(){
this.status$ = this.store.pipe(
takeWhile(()=> this.isAlive),
select(Selectors.getStatus)
);
this.process$ = this.store.pipe(
takeWhile(()=> this.isAlive),
select(Selectors.getProcess)
);
this.status$.subscribe(status => {
this.staus = staus;
this.status$.subscribe(process=> {
this.process= process;
if(!this.process.someBooleanProperty && this.status.success){
callMethodA();
}else if(!this.process.someBooleanProperty && this.status.error){
callMethodB();
}
});
});
Я хочу убедиться, что перед тем, как проверить свое состояние, статус $ завершен, поэтому я помещаю процесс $ подписка в статус $ подписка.
Я искал способы улучшить это, и если есть какие-то операторы, которые гарантируют, что обе подписки будут завершены до оценки условия. Я наткнулся на оператор forkJoin в RxJs и реорганизовал код, используя его, как показано ниже:
ngOnInit(){
forkJoin(
this.status$.pipe(takeWhile(()=> this.isAlive)).pipe(tap(status => this.status = status)),
this.process$.pipe(takeWhile(()=> this.isAlive)).pipe(tap(process=> this.process= process))
).susbscribe(() => {
if(!this.process.someBooleanProperty && this.status.success){
callMethodA();
}else if(!this.process.someBooleanProperty && this.status.error){
callMethodB();
}
});
}
Приведенный выше код с использованием forkJoin не работает, и отладчик даже не достигает строки кода, имеющей условие. Поскольку я бэкэнд-разработчик, изучающий интерфейс, я не могу понять причину. Пожалуйста, кто-нибудь может помочь мне определить ошибку в моем подходе. Кроме того, подход один плох?