Control flow with promises
Promises are very powerful and allow us to create really complex asynchronous data flows. When we want to execute tasks at the same time we can use Promise.all(), but if we want to execute tasks one after the other, we need to use a different solution. Here is an