Promise.any
allows us to have a list of promises to be executed, and once one of them finishes, it quickly resolves it. If all of them fails, it throws an exception and executes the reject part with a list of all exceptions.
Project.race
does a similar thing but with one difference. If one of the promises return an error, it will reject immediately even if there's at least one promise that is resolved, regardless if the the resolved project comes first or not.