簡體   English   中英

Rxjs 主題開關 map 調用另一個 observable

[英]Rxjs subject switch map to call another observable

我試圖在主題中的每個發射值上調用另一個 observable。

我現在的問題是subject的第一個發出值觸發switchMap並調用confirmCsvUpload(...) ,但是每個下一個發出的值都會觸發switchMap而不是confirmCsvUpload(...)

有人能弄清楚為什么它不調用 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() });
}

我試着用以下方式重播你的場景:

  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]');
  }

帶有 2 個調用的控制台日志:

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

- 第二次:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM