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

baseScore
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();
  1. 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();
  2. //@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;
  3. function loadScore(base: number): Promise<number>

    1function loadScore(base70: number): Promise<number> {2    return Promise.resolve(base + 5);3}
  4. 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}`);
  5. 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
  1. 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();
  2. 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;
  3. function loadScore(base: number): Promise<number>

    1function loadScore(base60: number): Promise<number> {2    return Promise.resolve(base + 5);3}
  4. 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}`);
  5. 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
  1. 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();
  2. 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;
  3. function loadScore(base: number): Promise<number>

    1function loadScore(base80: number): Promise<number> {2    return Promise.resolve(base + 5);3}
  4. 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}`);
  5. 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