From bf19eac3bb55cc5757d332c490e7aba5222467e1 Mon Sep 17 00:00:00 2001 From: Ryan Carniato Date: Wed, 14 Feb 2024 12:30:05 -0800 Subject: [PATCH] fix #2049 early interaction/multiple resources --- .changeset/fifty-rockets-yawn.md | 5 +++++ packages/solid/src/render/Suspense.ts | 27 ++++++++++++++++----------- 2 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 .changeset/fifty-rockets-yawn.md diff --git a/.changeset/fifty-rockets-yawn.md b/.changeset/fifty-rockets-yawn.md new file mode 100644 index 000000000..3a660a37a --- /dev/null +++ b/.changeset/fifty-rockets-yawn.md @@ -0,0 +1,5 @@ +--- +"solid-js": patch +--- + +fix #2049 early interaction/multiple resources diff --git a/packages/solid/src/render/Suspense.ts b/packages/solid/src/render/Suspense.ts index 35883243a..f2dce0aa8 100644 --- a/packages/solid/src/render/Suspense.ts +++ b/packages/solid/src/render/Suspense.ts @@ -144,21 +144,26 @@ export function Suspense(props: { fallback?: JSX.Element; children: JSX.Element if (sharedConfig.context && sharedConfig.load) { const key = sharedConfig.context.id + sharedConfig.context.count; let ref = sharedConfig.load(key); - if (ref && (typeof ref !== "object" || ref.status !== "success")) p = ref; + if (ref) { + if (typeof ref !== "object" || ref.status !== "success") p = ref; + else sharedConfig.gather!(key); + } if (p && p !== "$$f") { const [s, set] = createSignal(undefined, { equals: false }); flicker = s; - p.then(() => { - sharedConfig.gather!(key); - setHydrateContext(ctx); - set(); - setHydrateContext(); - }).catch((err: any) => { - if (err || sharedConfig.done) { - err && (error = err); - return set(); + p.then( + () => { + if (sharedConfig.done) return set(); + sharedConfig.gather!(key); + setHydrateContext(ctx); + set(); + setHydrateContext(); + }, + (err: any) => { + error = err; + set(); } - }); + ); } }