Refactoring rxjs 5 to rxjs 6 code - retryWhen

Tomislav Brabec

I've had this service code written in rxjs 5 notation:

      constructor(private _authService: AuthService) {
    this._ws$ = WebSocketSubject.create<any>({
      url: WS_URL,
      protocol: this._authService.token
    });

    this._ws$.retryWhen(errors => {
        // switchMap to retrieve the source error
        return errors.switchMap(sourceErr => {
            console.log('Retry WS.', sourceErr);
            return Observable.timer(1000).map(() => Observable.of(true));
          }
        );
      }
    ).subscribe(
      msg => {
        if ('channel_name' in msg) {
          console.log('Channel name', msg.channel_name);
          this._channelName = msg.channel_name;
          this._authService.channelName = msg.channel_name;
        }
        this.subject$.next(msg);
        console.log(msg);
      },
      err => {
        console.log(err);
        this.subject$.error(err);
      },
      () => this.subject$.complete()
    );
  }

I am trying to refactor it to rxjs 6 valid code and I have got this now:

constructor(private _authService: AuthService) {
this._ws$ = WebSocketSubject.create({
  url: WS_URL,
  protocol: this._authService.token
});

retryWhen(() => {
    // switchMap to retrieve the source error
    return switchMap(() => {
        return timer(1000).pipe(map(() => of(true)));
      }
    );
  }
).subscribe(
  msg => {
    if ('channel_name' in msg) {
      this._channelName = msg.channel_name;
      this._authService.channelName = msg.channel_name;
    }
    this.subject$.next(msg);
  },
  err => {
    this.subject$.error(err);
  },
  () => this.subject$.complete()
);

But I am getting following error:

TS2345: Argument of type '() => OperatorFunction<{}, Observable<boolean>>' is not assignable to parameter of type '(errors: Observable<any>) => Observable<any>'.
    Type 'OperatorFunction<{}, Observable<boolean>>' is not assignable to type 'Observable<any>'.
    Property '_isScalar' is missing in type 'OperatorFunction<{}, Observable<boolean>>'.

I cannot figure out what is the best way of using retryWhen function here and how to use WebSocketSubject inside it.

Cam Plimsoll

An implementation of the above code in Rxjs 6 would look something like the below

 this._ws$.pipe(
  retryWhen(errors =>
    errors.pipe(
      tap(val => console.log('Retry WS.', val)),
      delay(1000)
    )
  )).subscribe( msg => {
    if ('channel_name' in msg) {
      this._channelName = msg.channel_name;
      this._authService.channelName = msg.channel_name;
    }
    this.subject$.next(msg);
  },err => {
    this.subject$.error(err);
  },() => this.subject$.complete()
  );

For more information on retry when with Rxjs 6 you can refer to here
https://www.learnrxjs.io/operators/error_handling/retrywhen.html

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

TOP Ranking

  1. 1

    Failed to listen on localhost:8000 (reason: Cannot assign requested address)

  2. 2

    Loopback Error: connect ECONNREFUSED 127.0.0.1:3306 (MAMP)

  3. 3

    How to import an asset in swift using Bundle.main.path() in a react-native native module

  4. 4

    pump.io port in URL

  5. 5

    Compiler error CS0246 (type or namespace not found) on using Ninject in ASP.NET vNext

  6. 6

    BigQuery - concatenate ignoring NULL

  7. 7

    ngClass error (Can't bind ngClass since it isn't a known property of div) in Angular 11.0.3

  8. 8

    ggplotly no applicable method for 'plotly_build' applied to an object of class "NULL" if statements

  9. 9

    Spring Boot JPA PostgreSQL Web App - Internal Authentication Error

  10. 10

    How to remove the extra space from right in a webview?

  11. 11

    java.lang.NullPointerException: Cannot read the array length because "<local3>" is null

  12. 12

    Jquery different data trapped from direct mousedown event and simulation via $(this).trigger('mousedown');

  13. 13

    flutter: dropdown item programmatically unselect problem

  14. 14

    How to use merge windows unallocated space into Ubuntu using GParted?

  15. 15

    Change dd-mm-yyyy date format of dataframe date column to yyyy-mm-dd

  16. 16

    Nuget add packages gives access denied errors

  17. 17

    Svchost high CPU from Microsoft.BingWeather app errors

  18. 18

    Can't pre-populate phone number and message body in SMS link on iPhones when SMS app is not running in the background

  19. 19

    12.04.3--- Dconf Editor won't show com>canonical>unity option

  20. 20

    Any way to remove trailing whitespace *FOR EDITED* lines in Eclipse [for Java]?

  21. 21

    maven-jaxb2-plugin cannot generate classes due to two declarations cause a collision in ObjectFactory class

HotTag

Archive