По умолчанию, весь код в JavaScript работает синхронно. Это значит, что команды выполняются сверху вниз, одна за другой.
console.log('hello');
console.log('synchronous');
console.log('world');
Строки появятся на экране в том же порядке, как они написаны.
hello
synchronous
world
Запуск таймера с помощью setTimeout
Чтобы отложить выполнение какой-то части кода, в JS существует функция setTimeout
. В базовом случае она принимает два параметра:
callback
- функция которую нужно вызыватьdelay
- задержка в миллисекундах
setTimeout
установит таймер и вызовет функцию callback
через delay
миллисекунд.
console.log('hello');
setTimeout(() => {
console.log('асинхронное сообщение, которое появится на экране через 1 секунду')
}, 1000);
console.log('world');
Сообщения появятся в таком порядке:
hello
world
асинхронное сообщение, которое появится на экране через 1 секунду
Ошибки использования setTimeout
В setTimeout
первым параметром нужно обязательно передать функцию. Если написать просто console.log
- работать не будет.
console.log('hello');
setTimeout(console.log('failed async message'), 1000);
console.log('world');
Это неправильный пример. Вывод сообщения failed async message
не будет отложен, потому что console.log
запустится синхронно и вернет undefined
.
В итоге может получится два варианта. Они зависят от того, где запускается код:
-
Node.js - ошибка
TypeError [ERR_INVALID_CALLBACK]: Callback must be a function
-
Браузер — ошибки не будет, и сообщения выведутся по порядку
hello failed async message world