Async Workflows and Source Panels
Promise Callback Panel
Trace named Promise callbacks as ordered single-thread replay steps.
Promise Callback Panel
promise_callback.ts
type StepResult = {
label: string;
value: number;
};
const base: number = ;
let first: StepResult = { label: "pending", value: 0 };
let second: StepResult = { label: "pending", value: 0 };
function addStep(value: number): StepResult {
first = { label: "add", value: value + 4 };
return first;
}
function finishStep(result: StepResult): void {
second = { label: "double", value: result.value * 2 };
console.log(`base=${base}`);
console.log(`${first.label}=${first.value}`);
console.log(`${second.label}=${second.value}`);
}
Promise.resolve(base)
.then(addStep)
.then(finishStep);
type StepResult = {
label: string;
value: number;
};
const base: number = ;
let first: StepResult = { label: "pending", value: 0 };
let second: StepResult = { label: "pending", value: 0 };
function addStep(value: number): StepResult {
first = { label: "add", value: value + 4 };
return first;
}
function finishStep(result: StepResult): void {
second = { label: "double", value: result.value * 2 };
console.log(`base=${base}`);
console.log(`${first.label}=${first.value}`);
console.log(`${second.label}=${second.value}`);
}
Promise.resolve(base)
.then(addStep)
.then(finishStep);
type StepResult = {
label: string;
value: number;
};
const base: number = ;
let first: StepResult = { label: "pending", value: 0 };
let second: StepResult = { label: "pending", value: 0 };
function addStep(value: number): StepResult {
first = { label: "add", value: value + 4 };
return first;
}
function finishStep(result: StepResult): void {
second = { label: "double", value: result.value * 2 };
console.log(`base=${base}`);
console.log(`${first.label}=${first.value}`);
console.log(`${second.label}=${second.value}`);
}
Promise.resolve(base)
.then(addStep)
.then(finishStep);
promise callback
Named callbacks make each Promise step visible in replay while keeping the sequence deterministic.