Как сделать чтобы foreach работал линейно, а не асинхронно?
const arr = ['Яблоко', 'Апельсин', 'Груша'];

const iterator = i => new Promise((resolve, reject) =>
    setTimeout(() => {
        console.log(arr[i]);
        resolve();
    }, 1000)
)
.then(() => i + 1 < arr.length ? iterator(i + 1) : null);

iterator(0)
.then(() => console.log('DONE'))
.catch(err => console.log(err));
Ну и насоветовали вам, в JS можно точно так же, как и PHP, функция sleep реализуется в две строки, смотрите как просто:["Яблоко", "Апельсин", "Груша"].forEach((item, i) => {
   console.log(item);

   if ((i % 1) == 0) {
    console.log("пауза 1 секунды");
    sleep(1);
  }
});

function sleep(sec) {
  const end = Date.now() + sec * 1e3;
  while (end > Date.now());
}