diff --git a/packages/svelte/src/internal/client/dom/blocks/boundary.js b/packages/svelte/src/internal/client/dom/blocks/boundary.js index c8eb3ba6d8..f8e3e5839f 100644 --- a/packages/svelte/src/internal/client/dom/blocks/boundary.js +++ b/packages/svelte/src/internal/client/dom/blocks/boundary.js @@ -3,6 +3,7 @@ import { BOUNDARY_EFFECT, BOUNDARY_SUSPENDED, + DERIVED, DIRTY, EFFECT_PRESERVED, EFFECT_RAN, @@ -34,7 +35,7 @@ import { DEV } from 'esm-env'; import { from_async_derived, set_from_async_derived } from '../../reactivity/deriveds.js'; import { raf } from '../../timing.js'; import { loop } from '../../loop.js'; -import { mark_reactions } from '../../reactivity/sources.js'; +import { internal_set, mark_reactions } from '../../reactivity/sources.js'; const ASYNC_INCREMENT = Symbol(); const ASYNC_DECREMENT = Symbol(); @@ -165,9 +166,16 @@ export function boundary(node, props, children) { // @ts-ignore var forks = boundary.fn.forks; + for (var [signal, entry] of forks) { if (signal.v !== entry.v) { - mark_reactions(signal, DIRTY); + if ((signal.f & DERIVED) === 0) { + var val = signal.v; + signal.v = entry.v; + internal_set(signal, val); + } else { + mark_reactions(signal, DIRTY); + } } } forks.clear(); diff --git a/packages/svelte/tests/runtime-runes/samples/async-derived/_config.js b/packages/svelte/tests/runtime-runes/samples/async-derived/_config.js index dbe76c573b..38ca6d34ad 100644 --- a/packages/svelte/tests/runtime-runes/samples/async-derived/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/async-derived/_config.js @@ -32,7 +32,11 @@ export default test({ await Promise.resolve(); await Promise.resolve(); await Promise.resolve(); + await Promise.resolve(); + await Promise.resolve(); + await Promise.resolve(); await tick(); + flushSync(); assert.htmlEqual(target.innerHTML, '

84

'); d = deferred();