diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 28714ca9c9..9d709a4211 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -304,7 +304,7 @@ export class Batch { flush() { if (queued_root_effects.length > 0) { this.flush_effects(); - } else if (!this.#neutered) { + } else { this.#commit(); } @@ -352,8 +352,10 @@ export class Batch { * Append and remove branches to/from the DOM */ #commit() { - for (const fn of this.#callbacks) { - fn(); + if (!this.#neutered) { + for (const fn of this.#callbacks) { + fn(); + } } this.#callbacks.clear(); diff --git a/packages/svelte/src/internal/client/reactivity/deriveds.js b/packages/svelte/src/internal/client/reactivity/deriveds.js index c202dd10d1..0580918c9c 100644 --- a/packages/svelte/src/internal/client/reactivity/deriveds.js +++ b/packages/svelte/src/internal/client/reactivity/deriveds.js @@ -146,10 +146,6 @@ export function async_derived(fn, location) { const handler = (value, error = undefined) => { prev = null; - if ((parent.f & DESTROYED) !== 0) { - batch.neuter(); - } - current_async_effect = null; if (!pending) batch.activate(); @@ -187,6 +183,12 @@ export function async_derived(fn, location) { }; promise.then(handler, (e) => handler(null, e || 'unknown')); + + if (batch) { + return () => { + queueMicrotask(() => batch.neuter()); + }; + } }); if (DEV) {