diff --git a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js index 46c13d1a6f..3043380f05 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js @@ -371,7 +371,11 @@ export function client_component(analysis, options) { const body = b.function_declaration( b.id('$$body'), [b.id('$$anchor'), b.id('$$props')], - b.block([...component_block.body, b.stmt(b.call('$.exit'))]) + b.block([ + b.var('$$unsuspend', b.call('$.suspend')), + ...component_block.body, + b.stmt(b.call('$$unsuspend')) + ]) ); body.async = true; diff --git a/packages/svelte/src/internal/client/dom/blocks/boundary.js b/packages/svelte/src/internal/client/dom/blocks/boundary.js index 549425320d..60df9a119d 100644 --- a/packages/svelte/src/internal/client/dom/blocks/boundary.js +++ b/packages/svelte/src/internal/client/dom/blocks/boundary.js @@ -299,32 +299,11 @@ export function suspend() { */ export async function save(promise) { var restore = capture(); - - let boundary = active_effect; - while (boundary !== null) { - if ((boundary.f & BOUNDARY_EFFECT) !== 0) { - break; - } - - boundary = boundary.parent; - } - - if (boundary === null) { - e.await_outside_boundary(); - } - - // @ts-ignore - boundary?.fn(ASYNC_INCREMENT); - - const value = await promise; + var value = await promise; return { restore() { restore(); - - // @ts-ignore - boundary?.fn(ASYNC_DECREMENT); - return value; } }; diff --git a/packages/svelte/src/internal/client/index.js b/packages/svelte/src/internal/client/index.js index 0bdf8281e0..d178591342 100644 --- a/packages/svelte/src/internal/client/index.js +++ b/packages/svelte/src/internal/client/index.js @@ -130,7 +130,7 @@ export { update_store, mark_store_binding } from './reactivity/store.js'; -export { boundary, exit, save } from './dom/blocks/boundary.js'; +export { boundary, exit, save, suspend } from './dom/blocks/boundary.js'; export { set_text } from './render.js'; export { get,