Я занимаюсь разработкой приложения и столкнулся с некоторыми трудностями в следующей ситуации.
У меня есть URL, который в конце принимает pageSize и текущую страницу, и я пытаюсь использовать этот URL, получить в списке все элементы из таблицы базы данных, не зная, сколько страниц я на самом деле иметь (может быть одна страница данных или 1 миллион страниц).
Например, после того, как я сделаю запрос, скажем, с размером страницы 50 и страницей 1, я хочу получить страницу 2, а если страница 2 содержит 50 элементов, получить страницу 3, если она имеет значение меньше 50 элементы, чтобы остановиться и вернуть в конце концов все данные, которые я получил до сих пор, и ничего не будет возвращено, пока я не сделаю последний запрос.
Я пытался сделать следующее:
return this.http.get(url + currentPage, { headers }).pipe(
mergeMap((response: any) => {
managedObject = managedObject.concat(response.managedObjects);
if (response.managedObjects.length === pageSizeNo) {
currentPage++;
this.http.get(url + currentPage, { headers });
} else {
return managedObject;
}
})
);
Сначала я даю URL с определенным в нем pageSizeNo = 50 и currentPage = 1, затем после получения ответа я хочу пойти дальше и сделать еще один вызов или вернуть все, что я получил до сих пор. Проблема в том, что все останавливается на странице 2, и дальнейший вызов не происходит.
Вот как я подписываюсь на то, что возвращает функция:
this.service.fetchData()
.subscribe((response: any) => {
this.qualityData = response
});
Как я могу это исправить?