diff --git a/packages/svelte/src/internal/client/reactivity/resource.js b/packages/svelte/src/internal/client/reactivity/resource.js index c0267cb1e4..8aad0b23d8 100644 --- a/packages/svelte/src/internal/client/reactivity/resource.js +++ b/packages/svelte/src/internal/client/reactivity/resource.js @@ -53,14 +53,19 @@ class Resource { const p = get(this.#promise); return async (resolve, reject) => { - try { - await p; - await tick(); + const result = /** @type {Promise>} */ ( + (async () => { + await p; + await tick(); + return get(this.#current); + })() + ); - resolve?.(/** @type {Awaited} */ (get(this.#current))); - } catch (error) { - reject?.(error); + if (resolve || reject) { + return result.then(resolve, reject); } + + return result; }; }); @@ -127,10 +132,7 @@ class Resource { get finally() { get(this.#then); return (/** @type {any} */ fn) => { - return get(this.#then)( - () => fn(), - () => fn() - ); + return get(this.#then)().finally(fn); }; }