簡體   English   中英

如果在 RxJS 的過濾器運算符中滿足條件,如何更改變量值

[英]How to change variable value if condition is met in filter operator at RxJS

我有以下代碼不會訂閱,因此如果滿足過濾器 (!!discharges && !!discharges.length) 中的條件,則不會執行 setDischarges 方法。

loading: boolean;

this.discharge$ = this.dischargeService.getObservable('discharges');
    this.subDischarge = this.discharge$
      .pipe(
        filter((discharges: Discharge[]) => !!discharges && !!discharges.length),
        map((discharges: Discharge[]) => discharges),
      )
      .subscribe((discharges) => this.setDischarges(discharges));

如果過濾器中滿足該條件,我想更改加載變量值。 但是,我嘗試了以下代碼但它不起作用,因為當不滿足該條件時,它不會訂閱,因此無法執行 setDischarges。 如果滿足該條件並且不滿足該條件,我需要更改加載變量值,但在不滿足該條件時不影響訂閱。

loading: boolean;

this.discharge$ = this.dischargeService.getObservable('discharges');
    this.subDischarge = this.discharge$
      .pipe(
        filter((discharges: Discharge[]) => !!discharges && !!discharges.length 
        ? this.loading = false : this.loading = true),
        map((discharges: Discharge[]) => discharges),
      )
      .subscribe((discharges) => this.setDischarges(discharges));
this.subDischarge = this.discharge$
      .subscribe((discharges) => {
        this.loading = discharges && discharges.length;
        this.setDischarges(discharges);
      });

您的問題不夠明確,所以我假設放電服務是對服務的調用,並且getObservable返回一個包含 API 請求內容的可觀察對象。 與 JavaScript 中的 AJAX 調用類似,angular 中的每個 API 調用都是異步的,即設置加載布爾值的代碼或邏輯應僅在您從服務調用獲得響應時執行。

這樣做的方法是訂閱您的可觀察對象。 為此,您可以使用 subscribe 函數來捕獲來自您的服務調用的響應。 所以你最終的代碼如下

this.loading = true;
this.dischargeSub = this.dischargeService.getObservable('discharges').subscribe(discharges => {
   // This will only be executed on successful response
   this.loading = false;
   this.setDischarges(discharges);
}, err => {
   // Error block to handle your error case
});

變量dischargeSub將存儲訂閱的一個實例,當有新的服務調用API 或組件銷毀時,可以使用該實例取消訂閱

暫無
暫無

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

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