@babbert

Как поставить цикл на паузу?

Возможно ли в JS, без использование setTimeout, setInterval выполнить эту задачу:
while(true) {
    open(function() {
        /* async код, который выполняется всегда разное кол. времени */
        cycleContinue()
    });
    cycleSuspend()
}


Знаю о существований промисов, думаю они могут помочь, но что-то они сложноваты.( Пример бы, с таким случаем.
  • Вопрос задан
  • 1136 просмотров
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
const randomDelay = () => new Promise(resolve => setTimeout(resolve, Math.random()*1000));

(async function() {
  let counter = 0;
  while (true) {
    console.time('timer');
    await randomDelay();
    console.timeEnd('timer');
    if (counter++ > 20) {
      break;
    }
  }
})();

https://jsfiddle.net/melchiorio/x4dyk197/2/

функция randomDelay выполняется произвольное количество времени, и весь цикл ее ждет.
вместо randomDelay будет ваша асинхронная функция, нужно смотреть что это, чтобы ее промисифицировать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
hzzzzl
@hzzzzl
если на паузу, то лучше всего переписать async код на sync код, конечно

можно попробовать
open(async function() {
        /* async код, который выполняется всегда разное кол. времени */
        await myAsyncCode()
        .....
        cycleContinue()
    });
Ответ написан
Комментировать
ZaxaCodes
@ZaxaCodes
Football, JavaScript
я думаю что можно поставить и break,но у тебя будет выход из цикла,а потом ты просто можешь его опять вызвать
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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