From 1ab675f71720dac6b7958e3f9c8bf16e3622e17e Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 7 Oct 2025 19:02:37 -0400 Subject: [PATCH] fix: flush batches whenever an async value resolves --- .changeset/metal-parents-train.md | 5 +++++ .../src/internal/client/reactivity/batch.js | 22 ++++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) create mode 100644 .changeset/metal-parents-train.md 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 */