Skip to content

Commit a888292

Browse files
committed
fix: properly hydrate already-resolved async blocks
We were missing a "skip nodes to the end" invocation Fixes #17261
1 parent cd8d40a commit a888292

File tree

5 files changed

+38
-0
lines changed

5 files changed

+38
-0
lines changed

.changeset/sixty-garlics-drive.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: properly hydrate already-resolved async blocks

packages/svelte/src/internal/client/dom/blocks/async.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ export function async(node, blockers = [], expressions = [], fn) {
2727

2828
if (expressions.length === 0 && blockers.every((b) => b.settled)) {
2929
fn(node);
30+
if (was_hydrating) {
31+
skip_nodes(false);
32+
hydrate_next();
33+
}
3034
return;
3135
}
3236

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<script>
2+
let { message, another } = $props()
3+
</script>
4+
5+
<p>{message}</p>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { tick } from 'svelte';
2+
import { test } from '../../test';
3+
4+
export default test({
5+
mode: ['hydrate'],
6+
7+
ssrHtml: `<p>item 1</p><p>item 2</p><p>item 3</p>`,
8+
html: `<p>item 1</p><p>item 2</p><p>item 3</p>`,
9+
10+
async test({ assert, target }) {
11+
await tick();
12+
assert.htmlEqual(target.innerHTML, '<p>item 1</p><p>item 2</p><p>item 3</p>');
13+
}
14+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<script>
2+
import Component from './Component.svelte'
3+
4+
const messages = await Promise.resolve(["item 1", "item 2", "item 3"])
5+
const another = { test: 'test' }
6+
</script>
7+
8+
{#each messages as message}
9+
<Component {message} {another} />
10+
{/each}

0 commit comments

Comments
 (0)