@pinkhead_psd

Каким образом я могу получить данные с сервера и обработав их в цикле отправить другие запросы?

Добрый день, задача заключается в том, что надо получить список id`шников делая запрос по API, а затем иттерируя каждый id отправлять с ним также запрос по API, ответ заносить в массив
idArr представляет собой список из обычных id, перебирая которые можно получить список объектов с этим id
Я понимаю, что цикл у нас синхронный поэтому ответ не успеваю добавлять. Попробовал сделать функцию асинхронной, но результат такой же
function resolveAfterFetch(url) {
    return new Promise((resolve) => {
      fetch(url)
        .then(res => res.json())
        .then(result => {
          resolve(result)  
        })
    });
  }
 
  
  async function add1() {
    const idArr = await resolveAfterFetch('https://google.com/newstories.json');
    
    return idArr
  }
  
  add1().then(async v => {
    for (const value of v) {
      await resolveAfterFetch(`https://google.com/item/${value}.json?print=pretty`)
    }
  })
  .then(res => console.log(res))
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
@hasalex
разработчик
накидаю общую идею:
const anyFetch = async () => 
    fetch(url)
        .then(arr => arr.map(
                 id => fetch(url + id)
         ));

const allData = Promise.All(anyFetch).then(arrOfFinishData => doSomething(arrOfFinishData));


Идея следующая:
1. первый фетч возвращает вам промис с массивом айдишников
2. следующий чанк мапит айдишники в новые промисы, которые уже по каждому айдишниику вместо себя возвращают промис с данными.
3. в итоге anyFetch там, где уже надо работать с конечными данными, засовываем в Promise.All, чтобы дождаться всех данных и в чанке делаем с этими данными doSomething
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
может быть какой-то очередью воспользоваться? пусть отдельный воркер с каждым api запросом разбирается. и потом в какую-то табличку результаты добавляет. и потом уже смотреть что в табличке появилось и работать с этим.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы