diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 413cf63284..1e5bbc3e4a 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -182,8 +182,6 @@ export class Batch { #traverse_effect_tree(root) { root.f ^= CLEAN; - var should_defer = false; - /** @type {EffectTarget} */ var target = { parent: null, @@ -236,25 +234,15 @@ export class Batch { effect = effect.next; while (effect === null && parent !== null) { - if (parent.b !== null) { - var ready = parent.b.local_pending_count === 0; - - if (target.parent === null) { - should_defer ||= !ready; - } else if (parent === target.effect) { - if (ready) { - // TODO can this happen? - target.parent.effects.push(...target.effects); - target.parent.render_effects.push(...target.render_effects); - target.parent.block_effects.push(...target.block_effects); - } else { - this.#defer_effects(target.effects); - this.#defer_effects(target.render_effects); - this.#defer_effects(target.block_effects); - } - - target = /** @type {EffectTarget} */ (target.parent); - } + if (parent === target.effect) { + // TODO rather than traversing into pending boundaries and deferring the effects, + // could we just attach the effects _to_ the pending boundary and schedule them + // once the boundary is ready? + this.#defer_effects(target.effects); + this.#defer_effects(target.render_effects); + this.#defer_effects(target.block_effects); + + target = /** @type {EffectTarget} */ (target.parent); } effect = parent.next;