Как получить в консоли только последний результат выполнения цикла for?
Необходимо получить результат последней итерации цикла for
const arraySuccess = []
const pages = Number(document.querySelector('.page') + 1
for (let i = 1; i < pages; i++) {
async function getResponse() {
const href = document.location.href
const urlResponse = `${href}&page=${i}`
const urlRequest = await fetch(urlResponse)
const requestBody = await urlRequest.text()
const parser = new DOMParser()
const outer = parser.parseFromString(requestBody, "text/html")
const takeSuccess = Array.from(outer.querySelectorAll('.success'))
arraySuccess.push(takeSuccess)
} getResponse()
Этот код выведет в консоль столько логов, сколько страниц в документе, мне необходимо получит только лишь конечный результат, с помощью метода .push я добавляю на каждой итерации элемент в массив, но при этом из-за области видимости цикла, я не могу получить весь массив как конечный результат, то есть если я вне цикла выведу console.log(arraySuccess) я получу все тот же пустой массив, даже если буду устанавливать задержку, он не успевает запушить прежде чем лог запустится. Мне необходимо получить в консоль результат конечной итерации цикла, то есть чтобы все эти '.reviews-success' были в одном массиве arraySuccess
P.S пагинация на сайте реализована с помощью href и необходимо поочередно выполнять запросы.
Ответы (1 шт):
В данном случае не происходит ожидание завершения асинхронной функции, поэтому цикл завершается до того, как выполнятся все запросы.
Вместо этого достаточно было использовать await и вернуть из функции результат:
сделать функцию глобальной и принимающей номер страницы как параметр:
async function getResponse(i) { const href = document.location.href const urlResponse = `${href}&page=${i}` const urlRequest = await fetch(urlResponse) const requestBody = await urlRequest.text() const parser = new DOMParser() const outer = parser.parseFromString(requestBody, "text/html") const takeSuccess = Array.from(outer.querySelectorAll('.success')) return takeSuccess }цикл становится следующим
for (let i = 1; i < pages; i++) { arraySuccess.push(await getResponse(i)) }