9Asynchronous Functions, Iterators, and Generators
In this chapter you'll learn about ES2018's
async functions and the
await operator, which provide syntax for writing asynchronous code using the same familiar flow control structures you use when writing synchronous code (
for loops,
if statements,
try/
catch/
finally, calling functions and waiting for their results, etc.). You'll also learn about
async iterators,
async generators, and the
for-await-of statement.
Because
async functions build on promises, if you haven't already read Chapter 8, you'll want to do that now before moving on to this chapter.
ASYNC FUNCTIONS
In some sense,
async/
await syntax is “just” syntactic sugar for creating and consuming promises, and yet it completely transforms how you write your asynchronous code, letting you write the logical flow rather than writing only the synchronous flow and using callbacks for the asynchronous parts.
async/
await fundamentally changes, and simplifies, writing asynchronous code.
In a non-
async function, you're writing a series of operations that the JavaScript engine will carry out, in order, without allowing anything else to happen while it's doing so (see the “Single Thread Per ...