In this chapter, we will cover the following recipes:
- Creating promises with an async function
 - Awaiting the result of an async function
 - Using async results in a Promise chain
 - Awaiting multiple results in a series
 - Awaiting multiple results concurrently
 - Using Promise.all to collect an array of async results
 - Handling errors when awaiting an async function
 - Handling errors thrown inside of Promise.all
 - Using finally to ensure an operation is performed