Показать сообщение отдельно
  #1 (permalink)  
Старый 13.04.2021, 17:47
Интересующийся
Отправить личное сообщение для vlad_kl Посмотреть профиль Найти все сообщения от vlad_kl
 
Регистрация: 16.06.2020
Сообщений: 22

Как сделать повторный/рекурсивный fetch?
Добрый день!
Дорогие друзья, не могу придумать и нагуглить нормальное решение.

У меня есть функция, который посылает простой get запрос по урлу и получает респонс.
При этом я урлу добавляю query параметр, page=1

let url = '...некий url';
let page = 1;
url.searchParams.append('page', page);

function sendRequest(url) {
	return fetch(url)
	.then (response => response.json())
	.then (response => //некий код-действия с респонсом)


Далее мы получаем в респонсе некий объект. У этого объекта есть помимо прочих 2 свойства. Свойство page и свойство total_pages.
Url всегда будет разный. По одному урлу может быть 10 total_pages, по другому урлу 20 total_pages и так далее..

Когда по урлу page = 1 и total_pages = 1, то всё окей. Я забираю данные c page #1 и проблем нет. Но когда total_pages = 10, к примеру, то мне нужно вызвать 10 раз этот fetch, каждый раз меняя query параметр, поскольку информация дозируется, на каждом page свои данные.

Я попытался сделать что-то типа рекурсии. Если в респонсе больше, чем 1 total_pages, то мы увеличиваем page на +1
Присваиваем новый query параметр урлу и рекурсивно вызываем fetch
function sendRequest(url) {
	return fetch(url)
	.then (response => response.json())
	.then (response => { // некий код-действия с респонсом
        
        if (response.page < response.total_pages) {
	       page++; // увеличиваем page с 1 на 2
	       url.searchParams.set('page', page) // установим урлу query параметр page = 2
	       sendRequest(url) // рекурсивно вызываем fetch уже с новым query параметром
        })
}

Но такая конструкция нифига не работает.

Кто может подсказать валидный способ вызывать фетч повторно, при этом увеличивая query параметр и вызывая эту же функцию fetch с обновлённым урлом в аргументе?

Если вдруг непонятно написал, то скажите, что не так
Спасибо огромное за советы.

Последний раз редактировалось vlad_kl, 13.04.2021 в 18:13.
Ответить с цитированием