I am very confused, and new to @ngrx so please forgive me for not understanding how this is supposed to work.
Let's say I have an effect that is called PlaceOrderEffect
In this effect, I want to process each request in order.
processOrder$ = createEffect(
ofType(OrderActions.PROCESS_ORDER),
//here is where i get confused
concatMap([
this.service.addCrust(),
this.service.addTopings(),
this.service.sendToCook()
this.service.checkOut()
]
)
How can I run these in sequential order and handle the final response?
concatMap
is RxJS
operator to be used with pipe
, to merge the source observable with the new one returned by concatMap
, which is not your case.
I think you can use RxJS
concat
function to achieve what you're trying to do if the requests don't depend on each other, like the following:
processOrder$ = createEffect(() =>
this.actions$.pipe(
ofType(OrderActions.PROCESS_ORDER),
// here you need to switch and map to the new observable (concat one) returned by switchMapTo operator
switchMap(({ payload }) =>
concat(
this.service.addCrust(),
this.service.addTopings(),
this.service.sendToCook(),
this.service.checkOut()
)
)
)
);
But if each request depends on the previous one, you can use concatMap
operator like the following:
processOrder$ = createEffect(() =>
this.actions$.pipe(
ofType(OrderActions.PROCESS_ORDER),
concatMap(({ payload }) => this.service.addCrust(payload)),
concatMap((response1) => this.service.addTopings(response1)),
concatMap((response2) => this.service.sendToCook(response2)),
concatMap((response3) => this.service.checkOut(response3))
)
);