Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать повторный/рекурсивный fetch? (https://javascript.ru/forum/misc/82284-kak-sdelat-povtornyjj-rekursivnyjj-fetch.html)

vlad_kl 13.04.2021 17:47

Как сделать повторный/рекурсивный 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:29

Цитата:

Сообщение от vlad_kl (Сообщение 535529)
if (response.page < response.total_pages) {
           page++; // увеличиваем page с 1 на 2
           url.searchParams.set('page', page) // установим урлу query параметр page = 2
           sendRequest(url) // рекурсивно вызываем fetch уже с новым query параметром
}

Мистика какая-то, но всё заработало )))
Но... вопрос остаётся открытым.
Есть ли какие-то другие изящные валидные способы вызывать fetch повторно??? Возможно, рекурсия - не самое лучшее решение.

Спасибо)

ksa 13.04.2021 19:35

Цитата:

Сообщение от vlad_kl
Но когда total_pages = 10, к примеру, то мне нужно вызвать 10 раз этот fetch, каждый раз меняя query параметр

Это же можно сделать в цикле...


Часовой пояс GMT +3, время: 01:16.