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

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

let postData = {
  start: 0
};

let promises = [];

for (let i = 0; i < 100; i++) {

  if (i > 0) {
    postData.start = i * 50;
  }

  const p = axios.post("https://site.ru/", postData)
    .then((res) => {
      return res;
    }).catch((err) => {
      return err;
    });

  promises.push(p);

}

Promise.all(promises).then((data) => {
  console.log(data);
});
  • 9 октября 2023 г. 9:17
Ответы на вопрос 2
Чтобы добавить задержку между выполнением последовательных запросов, вы можете использовать функцию setTimeout внутри цикла. Вот пример, как это может выглядеть:

```javascript
let postData = {
  start: 0
};

let promises = [];

for (let i = 0; i < 100; i++) {

  if (i > 0) {
    postData.start = i * 50;
  }

  const p = new Promise((resolve, reject) => {
    setTimeout(() => {
      axios.post("https://site.ru/", postData)
        .then((res) => {
          resolve(res);
        }).catch((err) => {
          reject(err);
        });
    }, i * 1000); // Задержка в секундах между запросами
  });

  promises.push(p);

}

Promise.all(promises).then((data) => {
  console.log(data);
});
```

В этом примере каждый следующий запрос будет отправляться через одну секунду после предыдущего.

Обратите внимание, что я добавил в конструктор Promise обертку setTimeout, чтобы создать задержку перед выполнением каждого запроса. Внутри обертки setTimeout я выполняю axios.post и затем resolve или reject промис в зависимости от результатов запроса.
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));

await Promise.all(
  promises.map(async (promise, index) => {
    await sleep(index * 1000);
    promise();
  })
);
Похожие вопросы