An `async` function always returns a `Promise`, and its declared return type is wrapped automatically: writing `Promise<number>` as the return type means `await`ing the call yields `number`.
ts
async function fetchBalance(address: string): Promise<number> {
const response = await fakeRpcCall(address);
return response.balance;
}
async function main() {
const balance = await fetchBalance("0xabc");
console.log(balance.toFixed(2)); // balance is number, not Promise<number>
}`Promise.all` types an array/tuple of promises into a tuple of their resolved values: `Promise.all([p1, p2])` where `p1: Promise<A>` and `p2: Promise<B>` resolves to `[A, B]`. Errors from a rejected promise should be handled with `try/catch` around `await`, or `.catch()` on the promise chain.