Сохранить и объединить данные из запросов, вызванных рекурсивно, в один массив
У меня есть функция для отправки запроса к серверу. При каждом запросе мне приходит новый массив, предположим, из трех элементов. Мне нужно, чтобы в итоге у меня в массив array сохранились все массивы моих запросов
то есть, если был только один запрос, то в array будет три элемента, если было 5 запросов, то соответственно в array будет 15 элементов
пробовала методом concat(), но в результате всегда пустой массив только подскажите, как сохранить данные , приходящие со всем запросов?
const sendRequest = () => {
const array = []
fetch(`${api}/tickets?id=${localStorage.getItem('id')}`)
.then(response => response.json())
.then(items => {
if (!items.stop) {
sendRequest()
return array.concat(items.tickets)
}
})
.catch(() => errorHandling(true))
}
Ответы (1 шт):
Проблема заключается в том, что array создается при каждом вызове sendRequest - соответственно происходит всего одна добавка, и далее с этим массивом ничего не происходит.
Для решения, нужно либо передавать его извне и накапливать результат
Например:
const sendRequest = (array) => {
fetch(`${api}/tickets?id=${localStorage.getItem('id')}`)
.then(response => response.json())
.then(items => {
if (!items.stop) {
array.push(...items.tickets)
sendRequest(array)
}
})
.catch(() => errorHandling(true));
}
либо возвращать результат из функции sendRequest.
const sendRequest = async () => {
try {
const response = await fetch(`${api}/tickets?id=${localStorage.getItem('id')}`);
const items = response.json();
if (!items.stop) {
return items.tickets.concat(await sendRequest());
}
return items.tickets;
catch() {
errorHandling(true);
}
return [];
}