diff --git a/packages/svelte/tests/runtime-runes/samples/async-each-controlled-empty-pending/_config.js b/packages/svelte/tests/runtime-runes/samples/async-each-controlled-empty-pending/_config.js
index 29d374deec..2d8bf11b3b 100644
--- a/packages/svelte/tests/runtime-runes/samples/async-each-controlled-empty-pending/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/async-each-controlled-empty-pending/_config.js
@@ -15,15 +15,16 @@ export default test({
`
startA
startB
+ settleA
settleB
A0/B0
1 2
`
);
- const [startA, startB, settleB] = target.querySelectorAll('button');
+ const [startA, startB, settleA, settleB] = target.querySelectorAll('button');
- // Batch A: add key 9, then block forever on gate A.
+ // Batch A: add key 9, then block on gate A.
startA.click();
await tick();
@@ -32,18 +33,31 @@ export default test({
await tick();
// Settle B first so B commits while A is still pending.
- // Without the fix this throws reading `.e` of undefined and leaves a/b stuck.
settleB.click();
await tick();
+ assert.htmlEqual(
+ target.innerHTML,
+ `
+ startA
+ startB
+ settleA
+ settleB
+ A0/B0
+ 1 2
+ `
+ );
+ settleA.click();
+ await tick();
assert.htmlEqual(
target.innerHTML,
`
startA
startB
+ settleA
settleB
- A0/B1
-
+ A1/B1
+ 9
`
);
}
diff --git a/packages/svelte/tests/runtime-runes/samples/async-each-controlled-empty-pending/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-each-controlled-empty-pending/main.svelte
index 68c3937c25..2af93f1a1b 100644
--- a/packages/svelte/tests/runtime-runes/samples/async-each-controlled-empty-pending/main.svelte
+++ b/packages/svelte/tests/runtime-runes/samples/async-each-controlled-empty-pending/main.svelte
@@ -8,6 +8,8 @@
// and are not merged.
const items = $derived(extraKey === null ? base : [...base, extraKey]);
+ /** @type {((value: string) => void) | undefined} */
+ let resolveA;
/** @type {((value: string) => void) | undefined} */
let resolveB;
@@ -19,7 +21,8 @@
n === 0
? Promise.resolve(`${name}0`)
: new Promise((r) => {
- if (name === 'B') resolveB = r;
+ if (name === 'A') resolveA = r;
+ else resolveB = r;
});
const a = $derived(await gate('A', tickA));
@@ -34,15 +37,12 @@
base = [];
tickB = 1;
}
-
- function settleB() {
- resolveB?.('B1');
- }
startA
startB
-settleB
+ resolveA?.('A1')}>settleA
+ resolveB?.('B1')}>settleB
{a}/{b}