Before I had this resolver that just worked fine:
resolve() {
return forkJoin(
this.getData1(),
this.getData2(),
this.getData3()
);
}
Now I have to do something like that which is actually does not work:
resolve() {
return this.actions$
.pipe(
ofActionSuccessful(SomeSctonSuccess),
forkJoin(
this.getData1(),
this.getData2(),
this.getData3()
)
);
}
as I am hitting this error:
Argument of type 'Observable<[any, any, any, any]>' is not assignable to parameter of type 'OperatorFunction'. Type 'Observable<[any, any, any, any]>' provides no match for the signature '(source: Observable): Observable'.
Any ideas how to fix?
Now I heed to return my forkJoin
only after ofActionSuccessful(SomeSctonSuccess)
is taking place https://ngxs.gitbook.io/ngxs/advanced/action-handlers
Use exhaustMap
operator. It maps to inner observable, ignore other values until that observable completes
import { forkJoin } from 'rxjs';
import { exhaustMap } from 'rxjs/operators';
resolve() {
return this.actions$
.pipe(
ofActionSuccessful(SomeSctonSuccess),
exhaustMap(() => {
return forkJoin(
this.getData1(),
this.getData2(),
this.getData3()
)
})
);
}
Thanks to @Sajeetharan by looking to this url ended up using exhaustMap
resolve() {
return this.actions$.pipe(
ofActionSuccessful(LoadOnPremHostSuccess),
exhaustMap(() => {
return forkJoin(
this.getData1(),
this.getData2(),
this.getData3()
);
})
);
}
来源:https://stackoverflow.com/questions/50575525/how-to-return-a-forkjoin-observable-when-piping-the-operators