Async Programming
Async and Await
async functions return promises, and await pauses until a promise has a value.
async await
`await` unwraps a promise inside an `async` function.
Async and Await
await.ts
Replay: real traced execution (multi-file project)
async function doubleLater(value: number): Promise<number> {
const doubled: number = await Promise.resolve(value * 2);
return doubled;
}
const startValue: number = 4;
async function main(): Promise<void> {
const result: number = await doubleLater(startValue);
console.log(`result=${result}`);
}
main();
async function doubleLater(value: number): Promise<number> {
const doubled: number = await Promise.resolve(value * 2);
return doubled;
}
const startValue: number = 2;
async function main(): Promise<void> {
const result: number = await doubleLater(startValue);
console.log(`result=${result}`);
}
main();
async function doubleLater(value: number): Promise<number> {
const doubled: number = await Promise.resolve(value * 2);
return doubled;
}
const startValue: number = 7;
async function main(): Promise<void> {
const result: number = await doubleLater(startValue);
console.log(`result=${result}`);
}
main();
startValue ← 4
3 return doubled;4}56const startValue→ 4: number = 4; //@startValue=2, 778async function main(): Promise<void> {9 const result: number = await doubleLater(startValue);10 console.log(`result=${result}`);11}1213main();//@startValue=2, 7 async function main(): Promise<void>
6const startValue: number = 4; //@startValue=2, 778async function main(): Promise<void> {9 const result: number = await doubleLater(startValue4);10 console.log(`result=${result}`);async function doubleLater(value: number): Promise<number>
1async function doubleLater(value4: number): Promise<number> {2 const doubled: number = await Promise.resolve(value * 2);3 return doubled;doubled ← 8, value ← 4
1async function doubleLater(value: number): Promise<number> {2 const doubled→ 8: number = await Promise.resolve(value→ 4 * 2);3 return doubled8;4}56const startValue: number = 4; //@startValue=2, 778async function main(): Promise<void> {9 const result: number = await doubleLater(startValue);10 console.log(`result=${result}`);11}1213main();result ← 8
8async function main(): Promise<void> {9 const result→ 8: number = await doubleLater(startValue4);10 console.log(`result=${result8}`);11}outputresult=8
startValue ← 2
3 return doubled;4}56const startValue→ 2: number = 2;78async function main(): Promise<void> {9 const result: number = await doubleLater(startValue);10 console.log(`result=${result}`);11}1213main();async function main(): Promise<void>
6const startValue: number = 2;78async function main(): Promise<void> {9 const result: number = await doubleLater(startValue2);10 console.log(`result=${result}`);async function doubleLater(value: number): Promise<number>
1async function doubleLater(value2: number): Promise<number> {2 const doubled: number = await Promise.resolve(value * 2);3 return doubled;doubled ← 4, value ← 2
1async function doubleLater(value: number): Promise<number> {2 const doubled→ 4: number = await Promise.resolve(value→ 2 * 2);3 return doubled4;4}56const startValue: number = 2;78async function main(): Promise<void> {9 const result: number = await doubleLater(startValue);10 console.log(`result=${result}`);11}1213main();result ← 4
8async function main(): Promise<void> {9 const result→ 4: number = await doubleLater(startValue2);10 console.log(`result=${result4}`);11}outputresult=4
startValue ← 7
3 return doubled;4}56const startValue→ 7: number = 7;78async function main(): Promise<void> {9 const result: number = await doubleLater(startValue);10 console.log(`result=${result}`);11}1213main();async function main(): Promise<void>
6const startValue: number = 7;78async function main(): Promise<void> {9 const result: number = await doubleLater(startValue7);10 console.log(`result=${result}`);async function doubleLater(value: number): Promise<number>
1async function doubleLater(value7: number): Promise<number> {2 const doubled: number = await Promise.resolve(value * 2);3 return doubled;doubled ← 14, value ← 7
1async function doubleLater(value: number): Promise<number> {2 const doubled→ 14: number = await Promise.resolve(value→ 7 * 2);3 return doubled14;4}56const startValue: number = 7;78async function main(): Promise<void> {9 const result: number = await doubleLater(startValue);10 console.log(`result=${result}`);11}1213main();result ← 14
8async function main(): Promise<void> {9 const result→ 14: number = await doubleLater(startValue7);10 console.log(`result=${result14}`);11}outputresult=14