In rxjs, which operator should I put instead of retryWhen that uses bufferWhen?

132 Views Asked by At

I used retryWhen with the bufferWhen operator in my code. But retryWhen is deprecated. Which operator can I use instead of retryWhen? This is my code:

of(1)
        .pipe(
          tap(() => {
            if (this.webBusy) {
              throw 2;
            }
          }),
          retryWhen(errors =>
            errors.pipe(
              tap(val => console.log(`Nav ${val} WebBusy`)),
              bufferWhen(() => this.doNextAct$)
            )
          ),
          switchMap((resp: SvcResponse) => {
            this.webBusy = true;
            return api.doAct(navData);
          }),
          tap((resp: SvcResponse) => {
            this.webBusy = false;
            this.doNextAct$.next(1);
          }),
        ).subscribe()

I tried using the delay operator but I'm having trouble combining it with the bufferWhen operator.

1

There are 1 best solutions below

1
On BEST ANSWER

As described in the RxJS retryWhen, you can use retry with the delay config instead.

  retry({
    delay: (err, count) => {
      console.log(`retried ${count} times`);

      // if the retry count reach 2 then stop and throw an error
      if (count == 2) {
        throw new Error(err);
      }

      // otherwise keep retrying until the notifier completes with bufferWhen
      return notifire.pipe(bufferWhen(() => this.doNextAct$));
    },
  })

Checkout my stackblitz example