javascript: асинхронный sleep/delay без вложенного setTimeout

что-то перерыл пол интернета и не могу найти удовлетворяющее решение:

у меня есть задача:

while (data) {
    data = action();
    delay(1000); // синхронная секундная задержка
}

как бы сделать корректную функцию delay?

причем так, чтобы работала даже в редакторе JS на данном сайте - использование Promise вызывает ошибку, что надо в корне документа запускать

делать через while и постоянное зачитывание времени тоже вроде как не очень хороший способ - поскольку программа постоянно грузит процессор ненужными вызовами

подскажите, как лучше решить проблему


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

Автор решения: Zhihar

немного разобрался в вопросе - большей части запутался ранее :)

получился такой код, который более-менее устраивает

async function process() {

  for (i = 0; i < 10; i ++) {
    console.log(i);
    await new Promise((resolve, reject) => setTimeout(resolve, 3000));
  }
}

process();
console.log('test');
→ Ссылка