diff --git a/.changeset/metal-parents-train.md b/.changeset/metal-parents-train.md new file mode 100644 index 0000000000..57c99453c3 --- /dev/null +++ b/.changeset/metal-parents-train.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: flush batches whenever an async value resolves diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index fb704edb13..2b1130dd0b 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -375,21 +375,17 @@ export class Batch { decrement() { this.#pending -= 1; - if (this.#pending === 0) { - for (const e of this.#dirty_effects) { - set_signal_status(e, DIRTY); - schedule_effect(e); - } - - for (const e of this.#maybe_dirty_effects) { - set_signal_status(e, MAYBE_DIRTY); - schedule_effect(e); - } + for (const e of this.#dirty_effects) { + set_signal_status(e, DIRTY); + schedule_effect(e); + } - this.flush(); - } else { - this.deactivate(); + for (const e of this.#maybe_dirty_effects) { + set_signal_status(e, MAYBE_DIRTY); + schedule_effect(e); } + + this.flush(); } /** @param {() => void} fn */