Mastering asynchronous programming in JavaScript