diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 7bed61eb7b..1e4a3b36fe 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -179,10 +179,12 @@ export class Batch { is_fork = false; + eager = false; + #decrement_queued = false; #is_deferred() { - return this.is_fork || this.#blocking_pending > 0; + return !this.eager && (this.is_fork || this.#blocking_pending > 0); } /** @returns {boolean} */ @@ -260,8 +262,6 @@ export class Batch { */ var updates = (legacy_updates = []); - if (this.id === 5) debugger; - for (const root of roots) { this.#traverse(root, effects, render_effects); } @@ -692,6 +692,9 @@ export class Batch { // from = Batch.find(from); to = Batch.find(to); if (from === to) return; + if (from.is_fork || to.is_fork || (from.eager && !to.eager) || (to.eager && !from.eager)) { + return from; + } for (const [source, value] of from.previous) { if (!to.previous.has(source)) { @@ -1120,6 +1123,8 @@ let eager_versions = []; function eager_flush() { try { flushSync(() => { + var batch = Batch.ensure(); + batch.eager = true; for (const version of eager_versions) { update(version); } diff --git a/packages/svelte/tests/runtime-runes/samples/async-state-eager/_config.js b/packages/svelte/tests/runtime-runes/samples/async-state-eager/_config.js index f84228ec14..4031086e41 100644 --- a/packages/svelte/tests/runtime-runes/samples/async-state-eager/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/async-state-eager/_config.js @@ -23,11 +23,11 @@ export default test({ shift.click(); await tick(); - assert.htmlEqual(target.innerHTML, `
1
`); + assert.htmlEqual(target.innerHTML, `0
`); shift.click(); await tick(); - assert.htmlEqual(target.innerHTML, `2
`); + assert.htmlEqual(target.innerHTML, `0
`); shift.click(); await tick();