У меня есть таблица, которая содержит тяжелые данные для загрузки, поэтому время загрузки стало неуправляемым. Решение, которое я нашел, состояло в том, чтобы выполнить последовательное количество http-запросов, каждый из которых извлекал пакеты по 100 строк, пока не выполнил все данные в сетке. Я знаю, как реализовать 2 последовательных http-запроса с использованием concatMap, и он отлично работает, но я хотел бы иметь какое-то время l oop, которое будет проверять каждый ответ, и если текущее количество строк <общее количество строк, то подписаться на новый запрос Http , Странно, что я не нахожу никакого решения для этого, может быть, я с самого начала неправильно думаю об этом решении: D Любая помощь будет очень кстати! Заранее спасибо! </p>
Код пересылки, используемый для выполнения 2 http-запросов с использованием concatMap:
private LoadGridStringResourcesInProject(projectId: number) {
let allData: StringResource[] = [];
const batchSize = 100;
this.stringResourcesService.getStringResourcesInProject(projectId, 0, batchSize)
.pipe(
concatMap(firstData => {
const stringResourcesInProject = firstData as StringResource[];
// Loads first 100 rows on the Grid
this.gridApi.updateRowData({ add: stringResourcesInProject });
this.agGridService.refreshSizeColumns(this.agGrid);
// Fetch data returned by partial Http requests
allData = stringResourcesInProject;
if (allData && allData.length == batchSize) {
// Do new Http request to fetch the remaining data
return this.stringResourcesService
.getStringResourcesInProject(projectId, batchSize, 0);
}
return [];
})
).subscribe(data => {
const stringResourcesInProject = data as StringResource[];
// Loads the remaining rows in the Grid
this.gridApi.updateRowData({ add: stringResourcesInProject });
// Fetch data returned by partial Http requests
allData = allData.concat(stringResourcesInProject);
},
error => of(null),
() => {
this.agGridService.refreshSizeColumns(this.agGrid);
});
}