Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 13.04.2021, 18:29
Интересующийся
Отправить личное сообщение для vlad_kl Посмотреть профиль Найти все сообщения от vlad_kl
 
Регистрация: 16.06.2020
Сообщений: 22

Сообщение от vlad_kl Посмотреть сообщение
if (response.page < response.total_pages) {
           page++; // увеличиваем page с 1 на 2
           url.searchParams.set('page', page) // установим урлу query параметр page = 2
           sendRequest(url) // рекурсивно вызываем fetch уже с новым query параметром
}
Мистика какая-то, но всё заработало )))
Но... вопрос остаётся открытым.
Есть ли какие-то другие изящные валидные способы вызывать fetch повторно??? Возможно, рекурсия - не самое лучшее решение.

Спасибо)

Последний раз редактировалось vlad_kl, 13.04.2021 в 19:16.
Ответить с цитированием
  #3 (permalink)  
Старый 13.04.2021, 19:35
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтобы меню в зависимости от разрешения экрана выполняло свои функции? miha2020 Мобильный JavaScript 2 05.06.2022 09:02
Как сделать чтобы меню в зависимости от разрешения экрана выполняло свои функции? miha2020 Элементы интерфейса 5 07.03.2021 10:22
Как сделать сделать смену картинки по щелчку мыши? PavelGR Javascript под браузер 0 09.08.2020 09:28
Как сделать калькулятор и с чего начать? A.P. Yellowman Общие вопросы Javascript 3 15.11.2013 21:32
Вопрос как сделать эту панельку Определённых размеров и свойств. jei jQuery 3 09.06.2009 19:14