Home > Net >  Rxjs subject switch map to call another observable
Rxjs subject switch map to call another observable

Time:12-02

I am trying to call another observable on every emitted value in the subject.

My problem now is the first emitted value to the subject triggers the switchMap and calls the confirmCsvUpload(...), but every next emitted value does trigger the switchMap but not the confirmCsvUpload(...).

Can someone figure out why its not calling the function?

// Subject
private _confirmCsvUpload = new Subject<{ account: Account, previewData: PreviewData[], previewId: string }>();

// Subscription to the Subject 
this._confirmCsvUpload.pipe(
  switchMap(previewData => this._uploadCsvService.confirmCsvUpload(previewData.account, previewData.previewData, previewData.previewId))
).subscribe();

// Function which emits value to the subject (Not the function who gets called in the switchMap())
confirmCsvUpload(): void {
  this._confirmCsvUpload.next({ account: this.account, previewData: this._previewData, previewId: this.getPreviewIdFromRoute() });
}

CodePudding user response:

i try to replay you scenary with:

  private _confirm$ = new Subject();
  private _destroy$ = new Subject();
  ngOnInit() {
    this._confirm$
      .pipe(
        takeUntil(this._destroy$),
        tap((v) => console.log('[SUB]', v)),
        switchMap((v: any) => this.secondCall())
      )
      .subscribe();
  }

  secondCall() {
    console.log('[SECOND CALL]');
    return of();
  }

  callSub() {
    console.log('[NEXT VALUE]');
    this._confirm$.next('value');
  }

  ngOnDestroy() {
    this._destroy$.next(null);
    this._destroy$.complete();
    console.log('[NG ON DESTROY]');
  }

Console log with 2 call:

[NEXT VALUE]
[SUB] value
[SECOND CALL]

-- second time:

[NEXT VALUE]
[SUB] value
[SECOND CALL]
  • Related