Promise.all takes an array of promises and returns a single promise which resolves
after all of the given promises have resolved. It returns an array of the results.
If any of the given promises is rejected, then the other promises are ignored.
Promise.allSettled will return a promise with an array of results from the given promises,
errors and all.