Как сделать цикл асинхронных http запросов с задержкой (setTimeout) после получения ответа от сервера (JavaScript)

Такая задача: необходимо сделать n-количество запросов на сервер, при этом каждый новый запрос происходит например через 2000ms После! получения ответа от сервера.

Есть такой цикл с setTimeout, но он отправляет запросы не проверяя ответил сервер на предыдущий запрос или нет, т.е. просто отправляет запросы с установленной периодичностью.

Подскажите как решить задачу, описанную выше?

    for (let i = 0; i < array.length; i += 1) {
      setTimeout(async () => {
        const response = await dispatch(SomeHttpRequest);
        dispatch(saveResponse);
      }, 2000 * i);
    }

Пробовал такой цикл, в данном случае запросы отправляются после ответа от сервера на предыдущий запрос, но как сюда добавить задержку в 2000ms не знаю...

for (const partNumber of array) {
      const res = await dispatch(getProductsForCashingAction(1, 100, { search: partNumber }, partNumber));
      dispatch(saveCashModalProducts(partNumber, res?.results));
    }

Ответы (2 шт):

Автор решения: nörbörnën

(async () => {
  const array = new Array(10).fill(1);
  for (let i = 0; i < array.length; i += 1) {
    const res = await SomeHttpRequest().catch(() => null);
    console.log(res);
    await delay(2000);
  }
})();

async function delay(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, ms);
  });
}

async function SomeHttpRequest() {
  return new Promise((resolve, reject) => {
    setTimeout(
      () => {
        const random = Math.trunc(100 * Math.random());
        if (random % 2) {
          resolve(random);
        } else {
          reject(new Error('SOMETHING_WRONG'));
        }
      },
      1000 + (100*Math.random())
    )
  });
}

→ Ссылка