splincodewd
@splincodewd
Developer

Как сделать ожидание на setTimeout?

Не знаю, как сделать, но нужно, чтобы запросы не накладывались друг на друга, но при этом идет обращение каждые 1500 секунды к серверу:
как сделать, чтобы мы не попали сюда, до тех пор пока не завершатся все запросы?
let timeout = 1500;
let repeat = function(){

      send1().then(); // запрос 1 (async)
      send2().then(); // запрос 2 (async)
      send3().then(); // запрос 3 (async)
..
      sendN().then(); // запрос 4 (async)

      // как сделать, чтобы мы не попали сюда, до тех пор пока не завершатся все запросы?
     // в противном случае, рекурсивно снова прогнать функцию с запросами
      setTimeout(repeat, timeout);

}

  setTimeout(repeat, timeout);
  • Вопрос задан
  • 506 просмотров
Решения вопроса 3
Во в первых используй setInterval.
Во вторых поставь какой нибудь глобальный счетчик. Когда запрос отправляется увеличиваешь на 1, когда запрос вернулся уменьшаешь на 1. И если счетчик равен 0, то делаешь запросы заново. Примерно так.

window.globalCounter = 0;
setInterval(function(){
        if(window.globalCounter == 0){
             // Выполнять запросы
        }
    }, 1500);
Ответ написан
Комментировать
@WQP
Попробуйте сделать переменную status которая будет содержать в себе массив из всех send. Если у всех пунктов true, то позволять делать новый запрос
Ответ написан
Запросы AJAX'ом?

Каждую следующую функцию вызывай в коллбэке предыдущей.

И тогда только при успешном выполнении первой, вызовется вторая и так до N, а в N вызовется setTimeout(repeat, timeout);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы