Replay an async function that awaits a typed result and updates local state.

async result An `async` function can keep replay visible by awaiting deterministic data and then assigning ordinary local values.

Async Result Panel

fetched
async_result.ts
Replay: real traced execution (multi-file project)
type ServiceResult = {
    prepared: number;
    score: number;
};

const fetched: number = 8;
let prepared: number = 0;
let score: number = 0;

async function calculate(value: number): Promise<ServiceResult> {
    prepared = value + 1;
    const remote: number = await Promise.resolve(prepared + 9);
    score = remote;
    return { prepared, score };
}

async function main(): Promise<void> {
    const result: ServiceResult = await calculate(fetched);
    console.log(`fetched=${fetched}`);
    console.log(`prepared=${result.prepared}`);
    console.log(`score=${result.score}`);
}

main();
type ServiceResult = {
    prepared: number;
    score: number;
};

const fetched: number = 4;
let prepared: number = 0;
let score: number = 0;

async function calculate(value: number): Promise<ServiceResult> {
    prepared = value + 1;
    const remote: number = await Promise.resolve(prepared + 9);
    score = remote;
    return { prepared, score };
}

async function main(): Promise<void> {
    const result: ServiceResult = await calculate(fetched);
    console.log(`fetched=${fetched}`);
    console.log(`prepared=${result.prepared}`);
    console.log(`score=${result.score}`);
}

main();
type ServiceResult = {
    prepared: number;
    score: number;
};

const fetched: number = 12;
let prepared: number = 0;
let score: number = 0;

async function calculate(value: number): Promise<ServiceResult> {
    prepared = value + 1;
    const remote: number = await Promise.resolve(prepared + 9);
    score = remote;
    return { prepared, score };
}

async function main(): Promise<void> {
    const result: ServiceResult = await calculate(fetched);
    console.log(`fetched=${fetched}`);
    console.log(`prepared=${result.prepared}`);
    console.log(`score=${result.score}`);
}

main();
  1. fetched ← 8, prepared ← 0, score ← 0

    3    score: number;4};56const fetched→ 8: number = 8;  //@fetched=4, 127let prepared→ 0: number = 0;8let score→ 0: number = 0;910async function calculate(value: number): Promise<ServiceResult> {11    prepared = value + 1;12    const remote: number = await Promise.resolve(prepared + 9);13    score = remote;14    return { prepared, score };15}1617async function main(): Promise<void> {18    const result: ServiceResult = await calculate(fetched);19    console.log(`fetched=${fetched}`);20    console.log(`prepared=${result.prepared}`);21    console.log(`score=${result.score}`);22}2324main();
  2. async function main(): Promise<void>

    14    return { prepared, score };15}1617async function main(): Promise<void> {18    const result: ServiceResult = await calculate(fetched8);19    console.log(`fetched=${fetched}`);
  3. prepared ← 9, value ← 8

    7let prepared: number = 0;8let score: number = 0;910async function calculate(value8: number): Promise<ServiceResult> {11    prepared = value→ 8 + 1;12    const remote: number = await Promise.resolve(prepared + 9);13    score = remote;
    values this step9prepared
  4. remote ← 18, prepared ← 9, score ← 18

    10async function calculate(value: number): Promise<ServiceResult> {11    prepared = value + 1;12    const remote→ 18: number = await Promise.resolve(prepared→ 9 + 9);13    score = remote18;14    return { prepared, score };15}1617async function main(): Promise<void> {18    const result: ServiceResult = await calculate(fetched);19    console.log(`fetched=${fetched}`);20    console.log(`prepared=${result.prepared}`);21    console.log(`score=${result.score}`);22}2324main();
    values this step18score
  5. result ← [object Object]

    17async function main(): Promise<void> {18    const result→ [object Object]: ServiceResult = await calculate(fetched8);19    console.log(`fetched=${fetched8}`);20    console.log(`prepared=${result.prepared9}`);21    console.log(`score=${result.score18}`);22}
    outputfetched=8
    prepared=9
    score=18
  1. fetched ← 4, prepared ← 0, score ← 0

    3    score: number;4};56const fetched→ 4: number = 4;7let prepared→ 0: number = 0;8let score→ 0: number = 0;910async function calculate(value: number): Promise<ServiceResult> {11    prepared = value + 1;12    const remote: number = await Promise.resolve(prepared + 9);13    score = remote;14    return { prepared, score };15}1617async function main(): Promise<void> {18    const result: ServiceResult = await calculate(fetched);19    console.log(`fetched=${fetched}`);20    console.log(`prepared=${result.prepared}`);21    console.log(`score=${result.score}`);22}2324main();
  2. async function main(): Promise<void>

    14    return { prepared, score };15}1617async function main(): Promise<void> {18    const result: ServiceResult = await calculate(fetched4);19    console.log(`fetched=${fetched}`);
  3. prepared ← 5, value ← 4

    7let prepared: number = 0;8let score: number = 0;910async function calculate(value4: number): Promise<ServiceResult> {11    prepared = value→ 4 + 1;12    const remote: number = await Promise.resolve(prepared + 9);13    score = remote;
    values this step5prepared
  4. remote ← 14, prepared ← 5, score ← 14

    10async function calculate(value: number): Promise<ServiceResult> {11    prepared = value + 1;12    const remote→ 14: number = await Promise.resolve(prepared→ 5 + 9);13    score = remote14;14    return { prepared, score };15}1617async function main(): Promise<void> {18    const result: ServiceResult = await calculate(fetched);19    console.log(`fetched=${fetched}`);20    console.log(`prepared=${result.prepared}`);21    console.log(`score=${result.score}`);22}2324main();
    values this step14score
  5. result ← [object Object]

    17async function main(): Promise<void> {18    const result→ [object Object]: ServiceResult = await calculate(fetched4);19    console.log(`fetched=${fetched4}`);20    console.log(`prepared=${result.prepared5}`);21    console.log(`score=${result.score14}`);22}
    outputfetched=4
    prepared=5
    score=14
  1. fetched ← 12, prepared ← 0, score ← 0

    3    score: number;4};56const fetched→ 12: number = 12;7let prepared→ 0: number = 0;8let score→ 0: number = 0;910async function calculate(value: number): Promise<ServiceResult> {11    prepared = value + 1;12    const remote: number = await Promise.resolve(prepared + 9);13    score = remote;14    return { prepared, score };15}1617async function main(): Promise<void> {18    const result: ServiceResult = await calculate(fetched);19    console.log(`fetched=${fetched}`);20    console.log(`prepared=${result.prepared}`);21    console.log(`score=${result.score}`);22}2324main();
  2. async function main(): Promise<void>

    14    return { prepared, score };15}1617async function main(): Promise<void> {18    const result: ServiceResult = await calculate(fetched12);19    console.log(`fetched=${fetched}`);
  3. prepared ← 13, value ← 12

    7let prepared: number = 0;8let score: number = 0;910async function calculate(value12: number): Promise<ServiceResult> {11    prepared = value→ 12 + 1;12    const remote: number = await Promise.resolve(prepared + 9);13    score = remote;
    values this step13prepared
  4. remote ← 22, prepared ← 13, score ← 22

    10async function calculate(value: number): Promise<ServiceResult> {11    prepared = value + 1;12    const remote→ 22: number = await Promise.resolve(prepared→ 13 + 9);13    score = remote22;14    return { prepared, score };15}1617async function main(): Promise<void> {18    const result: ServiceResult = await calculate(fetched);19    console.log(`fetched=${fetched}`);20    console.log(`prepared=${result.prepared}`);21    console.log(`score=${result.score}`);22}2324main();
    values this step22score
  5. result ← [object Object]

    17async function main(): Promise<void> {18    const result→ [object Object]: ServiceResult = await calculate(fetched12);19    console.log(`fetched=${fetched12}`);20    console.log(`prepared=${result.prepared13}`);21    console.log(`score=${result.score22}`);22}
    outputfetched=12
    prepared=13
    score=22