Как получить в консоли только последний результат выполнения цикла 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 шт):

Автор решения: Grundy

В данном случае не происходит ожидание завершения асинхронной функции, поэтому цикл завершается до того, как выполнятся все запросы.

Вместо этого достаточно было использовать await и вернуть из функции результат:

  1. сделать функцию глобальной и принимающей номер страницы как параметр:

    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  
    }
    
  2. цикл становится следующим

    for (let i = 1; i < pages; i++) {
       arraySuccess.push(await getResponse(i))
    } 
    
→ Ссылка