diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 1172a3a33b..8f36e9e693 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -101,17 +101,17 @@ export class Batch { } else { for (const e of this.render_effects) set_signal_status(e, CLEAN); for (const e of this.effects) set_signal_status(e, CLEAN); + } - for (const [source, value] of current_values) { - source.v = value; - } - - for (const effect of this.async_effects) { - update_effect(effect); - } + for (const [source, value] of current_values) { + source.v = value; + } - this.async_effects = []; + for (const effect of this.async_effects) { + update_effect(effect); } + + this.async_effects = []; } /** diff --git a/packages/svelte/tests/runtime-runes/samples/async-expression/_config.js b/packages/svelte/tests/runtime-runes/samples/async-expression/_config.js index 17ca961fc6..c44d112625 100644 --- a/packages/svelte/tests/runtime-runes/samples/async-expression/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/async-expression/_config.js @@ -1,10 +1,6 @@ import { flushSync, tick } from 'svelte'; -import { deferred } from '../../../../src/internal/shared/utils.js'; import { test } from '../../test'; -/** @type {ReturnType} */ -let d; - export default test({ html: ` @@ -13,10 +9,11 @@ export default test({

pending

`, - async test({ assert, target }) { + async test({ assert, target, raf }) { const [reset, hello, goodbye] = target.querySelectorAll('button'); flushSync(() => hello.click()); + raf.tick(0); await Promise.resolve(); await Promise.resolve(); await tick(); @@ -32,6 +29,7 @@ export default test({ ); flushSync(() => reset.click()); + raf.tick(0); await tick(); assert.htmlEqual( target.innerHTML, @@ -40,10 +38,13 @@ export default test({

hello

+

updating...

` ); flushSync(() => goodbye.click()); + await Promise.resolve(); + raf.tick(0); await tick(); assert.htmlEqual( target.innerHTML, diff --git a/packages/svelte/tests/runtime-runes/samples/async-expression/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-expression/main.svelte index 6fc90ff2df..42536ab02a 100644 --- a/packages/svelte/tests/runtime-runes/samples/async-expression/main.svelte +++ b/packages/svelte/tests/runtime-runes/samples/async-expression/main.svelte @@ -9,6 +9,10 @@

{await deferred.promise}

+ {#if $effect.pending()} +

updating...

+ {/if} + {#snippet pending()}

pending

{/snippet}