пример: всё мы знаем что js работает "в одном потоке".
Т.е. в один момент может выполняться одно действие. когда что то выполняется, то в браузере все блокируется. Допустим ты делаешь запрос на сервер за какими-то данными, сервер отдаёт их, но на это, как правило, требуется время. И тут у нас есть два варианта, либо заблокировать всю страницу, и ждать когда запрос закончится и только после этого отдать управление пользователю, либо сделать запрос асинхронным (при помощи промисов) , и получить данные при этом не блокируя основной поток