Как правильно запрашивать сервер в цикле?

#javascript

#javascript

Вопрос:

У меня есть массив городов. Довольно большой массив. Для каждого города в массиве мне нужно сделать 2 запроса к моему серверу — 1 запрос, чтобы получить текущую погоду для города, и еще 1, чтобы получить сегодняшние новости. Для каждого из этих 2 запросов существует специальная конечная точка API. Как мне правильно получить всю необходимую информацию? Я имею в виду:

  1. не делайте слишком много запросов в секунду
  2. конечный результат должен хранить информацию в том же порядке, в котором города хранятся в массиве
  3. если некоторые запросы завершились ошибкой, не прекращайте запрашивать другие города (не так, как в Promise.all)

Ответ №1:

Вы можете использовать Promise.allSettled() , а затем использовать тайм-аут для ожидания определенного периода времени и повторить то же самое. Обязательно используйте также тайм-аут запроса (поэтому, когда сервер не отвечает в течение длительного времени, вы можете прервать выполнение).

Вот пример:

 const myFunc = async () => {
  await Promise.allSettled([ ... ]);
  setTimeout(myFunc, 1000);
};