https://medium.com/@haider.mtech2011/understanding-javascript-promises-and-async-await-resolving-an-array-of-promises-153229fa932b