https://blog.devgenius.io/event-loop-explained-how-javascript-handles-asynchronous-tasks-a2466ac1966f