«Я привык к функции sleep (), которая существует в C, Python, Bash и многих других. Как я могу спать на JavaScript? »

Ты не можешь. В JavaScript нет функции сна.

Но вы можете создать что-то очень похожее

const sleep = ms => new Promise(resolve => {
    setTimeout(
        () => {resolve()},
        ms
    );
});

Это создает обещание, которое разрешится за ms миллисекунды, поэтому вы можете использовать его с Promise.then(callback)

console.log(Date());
sleep(1000).then(() => console.log(Date()));

Но это не похоже на сон от других языков программирования. Вот способ сделать его более C-esque:

(async () => {
    console.log(Date());
    await sleep(1000);
    console.log(Date());
})();

В этой реализации await используется для хранения кода перед обещанием и после обещания в одном блоке. Однако await можно использовать только внутри асинхронных функций. Подробнее о await / async

Кроме того, этот sleep не загружает ЦП во время ожидания, поскольку использует setTimeout для пробуждения.

Хорошо, теперь вы можете спать на JavaScript. Но… ты должен?

Что ж, никто тебе не мешает. Мы живем в свободной стране, и вы можете делать со своим кодом все, что хотите. Сделайте бесконечный цикл. Разбейте ваш компьютер. Взломайте АНБ. Программа на Java. Шучу, не делай последнего.

Если серьезно, то в JS нет функции сна, потому что язык был создан для асинхронных операций: при событии X выполнить функцию Y, в отличие от синхронных языков: выполнить задачу A, затем выполните задачу B, затем выполните задачу C.

Большинство людей, пытаясь уснуть с помощью JS, имеют в виду следующее:

1. do task A
2. do task sleep for 1 second
3. do task B

Но это не совсем совместимо с философией JS и асинхронного программирования. Вместо этого люди должны иметь в виду следующее:

1. do task A
2. in one second, an event will happen that will trigger task B

И это именно то, что делает setTimeout:

taskA();
setTimeout(() => taskB(), 1000);

Вкратце, описанная в начале статьи функция sleep может использоваться для более чистого и простого кода. Но под капотом всегда будет событие и обратный вызов.

Github / переполнение стека / найми меня