Async / Await
Async/await is another way to implement asynchronous operations in a more clear, concise and ... synchronous fashion.
In order to make something like that to work, you need to create a function with the async keyword before it. If you do this, then you can define for every asynchronous operation that lies inside this function, to stop (or yield) execution until the result is back, fulfilled and resolved.
The way to do this is by typing the await keyword before the asynchronous operation like we did in line 7. That means that line 8 will not be executed until line 7 is fulfilled and the result has come back successfully.
Two things to notice!
First: The pause of the execution is only for the function that we are currently in (the one with the async keyword, in this case the 'getWeather' function). The other functions can be executed in parallel, or at least the way the event loop orders.
Secondly: The await method can be used before any function under one specific condition. That this function returns a promise and a promise only! So you can't place the await keyword before a setTimeout function or a function that accepts a callback function and doesn't return a promise. In such case you would have to wrap the whole setTimeout inside a new Promise object, but this is a topic for later maybe...