JavaScript приостановка кода

Есть некоторый цикл в котором есть условия, в некоторых условиях нужно выполнить приостановку кода, именно приостановку, а не выполнение с задержкой.

Пример:

let arr = [100,75,50,25,0];

for (let i=0; i<arr.length;i++) {
    if (arr[i]== 100) {
        setTimeout(writeline,500,arr[i]);
    } else if(arr[i]==25) {
        setTimeout(writeline,500,arr[i]);
    } else {
        writeline(arr[i]);
    }

}
function writeline (arg) {
    console.log(arg);
}

Вывод в консоль будет: 75 50 0 *задержка 0.5s* 100 *задержка 0.5s* 25

А нужно что бы было *задержка 0.5s* 100 75 50 *задержка 0.5s* 25 0


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

Автор решения: Алексей Шиманский

let arr = [100,75,50,25,0];

async function go(arr) {
  for (let i=0; i<arr.length;i++) {          
      if (arr[i]== 100) {                
          console.log(await wait(1500));
          writeline(arr[i]);
      } else if(arr[i]==25) {
          console.log(await wait(1500));          
          writeline(arr[i]);          
      } else {
          writeline(arr[i]);
      }

  }
}

function writeline (arg) {
    console.log(arg);
}

async function wait(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve(`Ждали ${ms} ms`), ms)
  });
}

go(arr);

→ Ссылка