squadbrodyaga
@squadbrodyaga
帆は風を変えた

Как сделать setTimeout в функции, которая вызывается в цикле?

Здравствуйте, есть функция, которая достаёт данные из массива по id, а если этих данных в массиве нет,
то делает запрос этих данных на сервер, проблема в том, что можно делать запрос на сервер только один раз в 60 мс.

async function getData(id) {
   const data = myArray.find(obj => obj.id == id)

   if (data) return data
   else {
      /* сервер разрешает делать запрос только один раз в 60мс */
      const response = await fetch(`https://server/api/${id}`)  
      return response.json()
   }
}



/* Теперь данная функция вызывается в цикле */
const x = array.map(async item => {
  const data = await getData(item.id)
  /* ...   ... */ 
})

Но скорость цикла очевидно быстрее чем 60мс, а замедлять его с помощью
setTimeout я не могу, потому что это замедлит все запросы, в том числе и те,
где не нужно обращаться к серверу.

Думаю что нужно вынести запрос к серверу в отдельную функцию
и как-то её "замедлить", сделать так, чтобы независимо от того, сколько раз её вызвали
она работала только раз через 60мс. Как такое реализовать?
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
squadbrodyaga
@squadbrodyaga Автор вопроса
帆は風を変えた
В итоге написал вот такое решение:
async function getData(id) {
   const data = myArray.find(obj => obj.id == id)

   if (data) return data
   else {
      await new Promise(resolve => setTimeout(resolve, 60))

      const response = await fetch(`https://server/api/${id}`)  
      return await response.json()
   }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы