Подождите X раз, затем продолжите цикл - JS React - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть цикл, который циклически повторяет и создает REST-запросы, каждый раз создавая и выполняя разные.

В будущем я предполагаю, что число запросов REST, которые могут быть выполнены, увеличится намного больше, чем браузер примет за один раз (более 20 000).

Я хочу сделать что-то вроде подсчета, сколько циклов было сделано, и после каждых 500 или около того, делая паузу в течение нескольких секунд, чтобы позволить браузеру догнать ответы REST, а затем продолжить.

Как это делается в реагировать JS?

пример кода:

for (var i = 0; i < array.length; i++)
{
  query += i; 
  axious.get(query) . then { ...does stuff here... } 
  //want something along the lines of if multiple of 500, wait(1000)

} 

1 Ответ

0 голосов
/ 03 апреля 2019

самый простой подход - создать функцию waitIf, которая возвращает Promise и принимает условие. Если условие true, он будет ждать, затем выполнить обратный вызов, в противном случае он выполнит обратный вызов напрямую.

простая реализация будет.

function waitIf(condition, duration, callback) {


    if (condition) {
        // return a Promise that wait for a `duration` ms using timeout 
        return Promise((resolve) => {
            setTimeout(() => {
                resolve(callback());
            }, duration);
        })
    }

    return callback();
}

for (let i = 0; i < array.length; i++) {
    query += i;

    // unify the call here
    waitIf(i % 500 === 0, 1000, () => axious.get(query)).then();
}
...