diff --git a/.changeset/green-sites-lead.md b/.changeset/green-sites-lead.md new file mode 100644 index 0000000000..22371b6bf5 --- /dev/null +++ b/.changeset/green-sites-lead.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: render `:catch` of `#await` block with correct key diff --git a/packages/svelte/src/internal/client/dom/blocks/await.js b/packages/svelte/src/internal/client/dom/blocks/await.js index b4cd72df99..09a3ec5ca4 100644 --- a/packages/svelte/src/internal/client/dom/blocks/await.js +++ b/packages/svelte/src/internal/client/dom/blocks/await.js @@ -102,7 +102,7 @@ export function await_block(node, get_input, pending_fn, then_fn, catch_fn) { (e) => { resolve(() => { internal_set(error, e); - branches.ensure(THEN, catch_fn && ((target) => catch_fn(target, error))); + branches.ensure(CATCH, catch_fn && ((target) => catch_fn(target, error))); if (!catch_fn) { // Rethrow the error if no catch block exists diff --git a/packages/svelte/tests/runtime-runes/samples/await-immediate-fulfilled/_config.js b/packages/svelte/tests/runtime-runes/samples/await-immediate-fulfilled/_config.js new file mode 100644 index 0000000000..650bfe17a7 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/await-immediate-fulfilled/_config.js @@ -0,0 +1,61 @@ +import { test } from '../../test'; +import { tick } from 'svelte'; + +export default test({ + async test({ assert, target }) { + const [resolveImmediate, resolveTimeout, rejectImmediate, rejectTimeout] = + target.querySelectorAll('button'); + + rejectTimeout.click(); + await new Promise((resolve) => setTimeout(resolve, 1)); + assert.htmlEqual( + target.innerHTML, + ` + + + + +

err [Yeah]

+ ` + ); + + resolveImmediate.click(); + await tick(); + assert.htmlEqual( + target.innerHTML, + ` + + + + +

resolved [?]

+ ` + ); + + resolveTimeout.click(); + await new Promise((resolve) => setTimeout(resolve, 1)); + assert.htmlEqual( + target.innerHTML, + ` + + + + +

resolved [OK]

+ ` + ); + + rejectImmediate.click(); + await tick(); + assert.htmlEqual( + target.innerHTML, + ` + + + + +

err [??]

+ ` + ); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/await-immediate-fulfilled/main.svelte b/packages/svelte/tests/runtime-runes/samples/await-immediate-fulfilled/main.svelte new file mode 100644 index 0000000000..d95b4f03a9 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/await-immediate-fulfilled/main.svelte @@ -0,0 +1,34 @@ + + + + + + + +

+ {#await p} + ... + {:then v} + resolved [{v}] + {:catch err} + err [{err}] + {/await} +