diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index f9aa98939e..ab4497ead9 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -107,12 +107,7 @@ export class Batch { this.render_effects = []; this.effects = []; - // commit changes - for (const fn of this.#callbacks) { - fn(); - } - - this.#callbacks.clear(); + this.commit(); flush_queued_effects(render_effects); flush_queued_effects(effects); @@ -174,12 +169,25 @@ export class Batch { fn(); } + commit() { + // commit changes + for (const fn of this.#callbacks) { + fn(); + } + + this.#callbacks.clear(); + } + increment() { this.#pending += 1; } decrement() { this.#pending -= 1; + + if (this.#pending === 0) { + this.commit(); + } } settled() { diff --git a/packages/svelte/tests/runtime-runes/samples/async-derived-in-if/_config.js b/packages/svelte/tests/runtime-runes/samples/async-derived-in-if/_config.js index ffb31631d3..ab020d85f7 100644 --- a/packages/svelte/tests/runtime-runes/samples/async-derived-in-if/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/async-derived-in-if/_config.js @@ -2,11 +2,6 @@ import { flushSync } from 'svelte'; import { test } from '../../test'; export default test({ - html: ` - -

pending

- `, - async test({ assert, target }) { const button = target.querySelector('button');