Demystifying Asynchronous JavaScript: A Step-by-Step Guide