[英]How to combine two Observables into one Observable Array using RxJs
[英]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.