'Can I suggest the order of RxJs forkJoin execution on the server?

In the following forkJoin code, I want requestTwo to execute only after requestOne has executed. Can this be done? From my tests, requestTwo completes before requestOne. Or is their an RxJs function that would ensure the order of execution?

forkJoin({
  requestOne: this.fillOrderService.changeOrderStatus({
    orderNo: this.orderNo,
    orderStatus: this.orderStatus,
    paymentIntent: paymentIntent,
    amount: this.processingOrder?.subtotal
  }),
  requestTwo: this.fillOrderService.getOrders('pending'),
}).subscribe(({ requestOne, requestTwo }) => {
  this.orders = requestTwo;
  this.orders = this.orders.filter(order => order._id !== this.processingOrder._id)

  this.processingOrder = requestOne;
  this.orderNo = this.processingOrder?._id;
  this.orderStatus = this.processingOrder?.status;
});


Solution 1:[1]

combineLatest executes all sources at the same time.

To fire your requests sequentially, you can chain them together using pipe(switchMap()).

result$ = this.fillOrderService.changeOrderStatus(...).pipe(
    switchMap(requestOne => this.fillOrderService.getOrders('pending').pipe(
        map(requestTwo => ({ requestOne, requestTwo })
    ))
);

Here switchMap internally subscribes to the "inner" observable (getOrders()) and emits its results. We can use map to transform the emission from the second request into an object that contains both response objects.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 BizzyBob