Доброго времени суток! Я начинающий разработчик, столкнулся с проблемой при написании цикла с запросами

Рейтинг: 0Ответов: 1Опубликовано: 17.07.2023
getListIs(chatId, arrayUrl) {
  const HTTPrequest1C = require('./function_1c');

  var is_array = ['Элемент1'];

  arrayUrl.forEach((item_url) => {
    var is_list = HTTPrequest1C.getUser(chatId, item_url)
    is_list.then((result) => {
      is_array.push(result.is)
      console.log(is_array)
    })
  })
  console.log(is_array);
  return is_array
}

Циклом обхожу массив url адресов. На каждый делаю запрос, получаю промис и из него через then вытаскиваю результат. Его добавляю к массиву. Вижу что массив есть и все что нужно в него добавилось. Но после цикла возвращается исходный массив с одним элементом "Элемент1" (return is_array). Видимо возврат идет раньше чем отрабатывает цикл. Прошу прощения за видимо глупый вопрос но как дождаться когда цикл закончить работу и вернуть массив со всеми элементами?

Ответы

▲ 0Принят

Спасибо всем большое). У меня работает такой код async getUserArray(chatId, arrayUrl) { const resultArray = [] for (const item_url of arrayUrl) { let siteAnswer = await this.getUser(chatId, item_url) } return resultArray } Почему то добавив await перед обращением к сервису(как я понял я этим дожидаюсь окончания работы запроса к моему api) я в переменную siteAnswer получаю не промис а обычный массив как мне и нужно(сервис возвращает строку)...И соответственно отпадает необходимость использования .then