Async code uses try and catch around awaited work that might fail.

async error A rejected promise becomes an exception at the `await` line and can be handled with `catch`.

Async Error Handling

allowUser
errors.ts
Replay: real traced execution (multi-file project)
async function loadUser(allowUser: boolean): Promise<string> {
    if (!allowUser) {
        throw new Error("missing user");
    }
    return Promise.resolve("Ada");
}

const allowUser: boolean = true;

async function main(): Promise<void> {
    try {
        const user: string = await loadUser(allowUser);
        console.log(`user=${user}`);
    } catch (error) {
        console.log("user=guest");
    }
}

main();
async function loadUser(allowUser: boolean): Promise<string> {
    if (!allowUser) {
        throw new Error("missing user");
    }
    return Promise.resolve("Ada");
}

const allowUser: boolean = false;

async function main(): Promise<void> {
    try {
        const user: string = await loadUser(allowUser);
        console.log(`user=${user}`);
    } catch (error) {
        console.log("user=guest");
    }
}

main();
  1. allowUser ← true

    5    return Promise.resolve("Ada");6}78const allowUser→ true: boolean = true;  //@allowUser=false910async function main(): Promise<void> {11    try {12        const user: string = await loadUser(allowUser);13        console.log(`user=${user}`);14    } catch (error) {15        console.log("user=guest");16    }17}1819main();
  2. try

    10async function main(): Promise<void> {11    try {12        const user: string = await loadUser(allowUsertrue);13        console.log(`user=${user}`);
  3. async function loadUser(allowUser: boolean): Promise<string>

    1async function loadUser(allowUsertrue: boolean): Promise<string> {2    if (!allowUser) {3        throw new Error("missing user");4    }5    return Promise.resolve("Ada");6}
  4. user ← Ada

    10async function main(): Promise<void> {11    try {12        const user→ Ada: string = await loadUser(allowUsertrue);13        console.log(`user=${userAda}`);14    } catch (error) {15        console.log("user=guest");16    }17}1819main();
    outputuser=Ada
  1. allowUser ← false

    5    return Promise.resolve("Ada");6}78const allowUser→ false: boolean = false;910async function main(): Promise<void> {11    try {12        const user: string = await loadUser(allowUser);13        console.log(`user=${user}`);14    } catch (error) {15        console.log("user=guest");16    }17}1819main();
  2. try

    10async function main(): Promise<void> {11    try {12        const user: string = await loadUser(allowUserfalse);13        console.log(`user=${user}`);
  3. async function loadUser(allowUser: boolean): Promise<string>

    1async function loadUser(allowUserfalse: boolean): Promise<string> {2    if (!allowUser) {
  4. if (!allowUser)

    1async function loadUser(allowUser: boolean): Promise<string> {2    if (!allowUserfalse) {3        throw new Error("missing user");4    }
  5. main();

    16    }17}1819main();
  6. catch (error)

    13    console.log(`user=${user}`);14} catch (error) {15    console.log("user=guest");16}
    outputuser=guest