Как бы я объединил результаты двух наблюдаемых, но также использовал бы результат одной наблюдаемой, если она возвращается раньше, чем другая? - PullRequest
2 голосов
/ 09 апреля 2020

У меня есть два наблюдаемых объекта, возвращенных из служб Angular 8. Один получает определения столбцов для моей сетки, а другой - данные моей сетки. Я использую Ag-grid, привязанный к двум свойствам компонента, для данных строки и определений столбцов.

Мне нужны оба набора данных, чтобы определить последнюю дату в каждом столбце. Данные сетки всегда возвращаются намного дольше, чем определение столбца. Определения столбцов почти мгновенные. Данные сетки занимают около 10 секунд.

В настоящее время я использую forkjoin, чтобы подождать, пока обе наблюдаемые не вернут свои данные. Затем я устанавливаю связанные свойства. Хотя это работает, я хочу обновить определения столбцов, как только они станут доступны. Пользователи думают, что сетка выглядит как разбитая до тех пор, пока не будут заполнены определения столбцов.

Могу ли я повторно использовать результат определения столбца наблюдаемым, не вызывая наблюдаемое во второй раз?

Вот как выглядит мой код

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

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020
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] напрямую.

0 голосов
/ 09 апреля 2020

Поскольку кажется, что обе ваши наблюдаемые являются однократными, я думаю, что проще всего было бы не объединять их. Просто подпишитесь на каждого индивидуально.

...