Async Programming
Async Error Handling
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
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();
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();try
10async function main(): Promise<void> {11 try {12 const user: string = await loadUser(allowUsertrue);13 console.log(`user=${user}`);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}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
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();try
10async function main(): Promise<void> {11 try {12 const user: string = await loadUser(allowUserfalse);13 console.log(`user=${user}`);async function loadUser(allowUser: boolean): Promise<string>
1async function loadUser(allowUserfalse: boolean): Promise<string> {2 if (!allowUser) {if (!allowUser)
1async function loadUser(allowUser: boolean): Promise<string> {2 if (!allowUserfalse) {3 throw new Error("missing user");4 }main();
16 }17}1819main();catch (error)
13 console.log(`user=${user}`);14} catch (error) {15 console.log("user=guest");16}outputuser=guest