From 6b314bd202b510177601de518daa91e0abfb9ccd Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 23 Jan 2025 14:11:24 -0500 Subject: [PATCH] another --- .../src/internal/client/reactivity/effects.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index dd5a9731a5..8be44462ad 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -45,7 +45,7 @@ import { DEV } from 'esm-env'; import { define_property } from '../../shared/utils.js'; import { get_next_sibling } from '../dom/operations.js'; import { async_derived, derived, destroy_derived } from './deriveds.js'; -import { save } from '../dom/blocks/boundary.js'; +import { capture, suspend } from '../dom/blocks/boundary.js'; /** * @param {'$effect' | '$effect.pre' | '$inspect'} rune @@ -353,12 +353,19 @@ export function template_effect(fn, sync = [], async = [], d = derived) { let effect = /** @type {Effect} */ (active_effect); if (async.length > 0) { - save(Promise.all(async.map(async_derived))).then((result) => { + var restore = capture(); + var unsuspend = suspend(); + + Promise.all(async.map(async_derived)).then((result) => { + restore(); + if ((effect.f & DESTROYED) !== 0) { return; } - create_template_effect(fn, [...sync.map(d), ...result.restore()]); + create_template_effect(fn, [...sync.map(d), ...result]); + + unsuspend(); }); } else { create_template_effect(fn, sync.map(d));