Unlocking Asynchronicity in JavaScript: From Callbacks to Async/Await