簡體   English   中英

我將如何組合來自兩個 Observable 的結果,但如果一個 observable 的返回比另一個更快,我將如何使用它的結果?

[英]How would I combine the results from two Observables but also use result of one observable if it returns sooner than the other?

我有兩個從 Angular 8 服務返回的可觀察對象。 一個獲取我的網格的列定義,另一個獲取我的網格數據。 我正在使用綁定到行數據和列定義的兩個組件屬性的 Ag-grid。

我需要這兩個數據集來確定每列中的最新日期。 網格數據的返回時間總是比列定義長得多。 列定義幾乎是即時的。 網格數據大約需要 10 秒。

目前我使用 forkjoin 等到兩個可觀察對象都返回它們的數據。 然后我設置綁定屬性。 雖然這可行,但我想在列定義可用時立即更新它們。 用戶認為在填充列定義之前,網格看起來像是損壞了。

我可以重用列定義 observable 的結果而不再次調用 observable 嗎?

這是我的代碼的樣子

let gridDataObservable= this.gridDataService.getItems();
let columnDefinitionObservable = this.columnDefinitionService.getItems();

forkJoin([gridDataObservable,columnDefinitionObservable]).subscribe(results => {
  this.rowData= results[0];
  this.columnDefs = results[1];
  this.latestDates = GetDates(this.rowData,this.columnDefs);
}

由於聽起來您的兩個可觀察對象都是一次性的,因此我認為最簡單的方法是不將它們結合起來。 只需單獨訂閱每個。

const columnDefinitionObservable = this.columnDefinitionService.getItems();

const gridDataSubject = new BehaviorSubject<YourType|undefined>(undefined);
this.gridDataService.getItems().subscribe(gridDataSubject)

const target$ = combineLatest(columnDefinitionObservable, gridDataSubject)

為 gridData 提供一個未定義的初始值。 如果 columnDefinitionObservable 先觸發,你會得到 [column, undefined],然后是 [column, gridData]

如果 gridData 先觸發,你會直接得到 [column, gridData] 。

暫無
暫無

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

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