Async Programming
Promise Basics
A promise represents a value that will be available later.
promise
A `Promise<T>` holds a future value of type `T` and runs callbacks when the value is ready.
Promise Basics
promise.ts
Replay: real traced execution (multi-file project)
function loadScore(base: number): Promise<number> {
return Promise.resolve(base + 5);
}
const baseScore: number = 70;
async function main(): Promise<void> {
const scorePromise: Promise<number> = loadScore(baseScore);
const score: number = await scorePromise;
console.log(`score=${score}`);
}
main();
function loadScore(base: number): Promise<number> {
return Promise.resolve(base + 5);
}
const baseScore: number = 60;
async function main(): Promise<void> {
const scorePromise: Promise<number> = loadScore(baseScore);
const score: number = await scorePromise;
console.log(`score=${score}`);
}
main();
function loadScore(base: number): Promise<number> {
return Promise.resolve(base + 5);
}
const baseScore: number = 80;
async function main(): Promise<void> {
const scorePromise: Promise<number> = loadScore(baseScore);
const score: number = await scorePromise;
console.log(`score=${score}`);
}
main();
baseScore ← 70
2 return Promise.resolve(base + 5);3}45const baseScore→ 70: number = 70; //@baseScore=60, 8067async function main(): Promise<void> {8 const scorePromise: Promise<number> = loadScore(baseScore);9 const score: number = await scorePromise;10 console.log(`score=${score}`);11}1213main();//@baseScore=60, 80 async function main(): Promise<void>
5const baseScore: number = 70; //@baseScore=60, 8067async function main(): Promise<void> {8 const scorePromise: Promise<number> = loadScore(baseScore70);9 const score: number = await scorePromise;function loadScore(base: number): Promise<number>
1function loadScore(base70: number): Promise<number> {2 return Promise.resolve(base + 5);3}scorePromise ← [object Promise]
7async function main(): Promise<void> {8 const scorePromise→ [object Promise]: Promise<number> = loadScore(baseScore70);9 const score: number = await scorePromise[object Promise];10 console.log(`score=${score}`);score ← 75
7async function main(): Promise<void> {8 const scorePromise: Promise<number> = loadScore(baseScore);9 const score→ 75: number = await scorePromise[object Promise];10 console.log(`score=${score75}`);11}1213main();outputscore=75
baseScore ← 60
2 return Promise.resolve(base + 5);3}45const baseScore→ 60: number = 60;67async function main(): Promise<void> {8 const scorePromise: Promise<number> = loadScore(baseScore);9 const score: number = await scorePromise;10 console.log(`score=${score}`);11}1213main();async function main(): Promise<void>
5const baseScore: number = 60;67async function main(): Promise<void> {8 const scorePromise: Promise<number> = loadScore(baseScore60);9 const score: number = await scorePromise;function loadScore(base: number): Promise<number>
1function loadScore(base60: number): Promise<number> {2 return Promise.resolve(base + 5);3}scorePromise ← [object Promise]
7async function main(): Promise<void> {8 const scorePromise→ [object Promise]: Promise<number> = loadScore(baseScore60);9 const score: number = await scorePromise[object Promise];10 console.log(`score=${score}`);score ← 65
7async function main(): Promise<void> {8 const scorePromise: Promise<number> = loadScore(baseScore);9 const score→ 65: number = await scorePromise[object Promise];10 console.log(`score=${score65}`);11}1213main();outputscore=65
baseScore ← 80
2 return Promise.resolve(base + 5);3}45const baseScore→ 80: number = 80;67async function main(): Promise<void> {8 const scorePromise: Promise<number> = loadScore(baseScore);9 const score: number = await scorePromise;10 console.log(`score=${score}`);11}1213main();async function main(): Promise<void>
5const baseScore: number = 80;67async function main(): Promise<void> {8 const scorePromise: Promise<number> = loadScore(baseScore80);9 const score: number = await scorePromise;function loadScore(base: number): Promise<number>
1function loadScore(base80: number): Promise<number> {2 return Promise.resolve(base + 5);3}scorePromise ← [object Promise]
7async function main(): Promise<void> {8 const scorePromise→ [object Promise]: Promise<number> = loadScore(baseScore80);9 const score: number = await scorePromise[object Promise];10 console.log(`score=${score}`);score ← 85
7async function main(): Promise<void> {8 const scorePromise: Promise<number> = loadScore(baseScore);9 const score→ 85: number = await scorePromise[object Promise];10 console.log(`score=${score85}`);11}1213main();outputscore=85