Asynchronous JavaScript: Promises, Async/Await and AJAX - From Callback Hell to Promises