A promise is pending, fulfilled or rejected, and settles once. `then` returns a new promise, so chains flatten. Combinators run work concurrently: `all` fails fast, `allSettled` reports every outcome, `race` takes the first to settle.
const [a, b] = await Promise.all([getBlock(), getGas()]);
Sequential `await`s in a loop are the most common cause of a slow dApp — batch independent calls.