Skip to content

Commit 5a05dc5

Browse files
committed
fix
1 parent 68e2eee commit 5a05dc5

File tree

3 files changed

+97
-4
lines changed

3 files changed

+97
-4
lines changed

packages/svelte/src/internal/client/reactivity/deriveds.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,6 @@ export function async_derived(fn, location) {
145145
const handler = (value, error = undefined) => {
146146
prev = null;
147147

148-
if ((parent.f & DESTROYED) !== 0) {
149-
return;
150-
}
151-
152148
from_async_derived = null;
153149

154150
if (should_suspend) {
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { flushSync, tick } from 'svelte';
2+
import { test } from '../../test';
3+
4+
export default test({
5+
async test({ assert, target }) {
6+
const [a, b, c, ok] = target.querySelectorAll('button');
7+
8+
assert.htmlEqual(
9+
target.innerHTML,
10+
`
11+
<h1>b</h1>
12+
<button>a</button>
13+
<button>b</button>
14+
<button>c</button>
15+
<button>ok</button>
16+
<p>pending...</p>
17+
`
18+
);
19+
20+
await Promise.resolve();
21+
await Promise.resolve();
22+
await Promise.resolve();
23+
24+
assert.htmlEqual(
25+
target.innerHTML,
26+
`
27+
<h1>c</h1>
28+
<button>a</button>
29+
<button>b</button>
30+
<button>c</button>
31+
<button>ok</button>
32+
<p>c</p>
33+
`
34+
);
35+
36+
flushSync(() => ok.click());
37+
38+
flushSync(() => b.click());
39+
await Promise.resolve();
40+
await Promise.resolve();
41+
42+
assert.htmlEqual(
43+
target.innerHTML,
44+
`
45+
<h1>b</h1>
46+
<button>a</button>
47+
<button>b</button>
48+
<button>c</button>
49+
<button>ok</button>
50+
<p>b</p>
51+
`
52+
);
53+
}
54+
});
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<script lang=ts>
2+
let route = $state('b');
3+
let ok = $state(false);
4+
5+
function goto(r) {
6+
return Promise.resolve().then(() => {
7+
route = r;
8+
throw new Error('nope');
9+
});
10+
}
11+
</script>
12+
13+
<h1>{route}</h1>
14+
<button onclick={() => route = 'a'}>a</button>
15+
<button onclick={() => route = 'b'}>b</button>
16+
<button onclick={() => route = 'c'}>c</button>
17+
<button onclick={() => ok = true}>ok</button>
18+
19+
<svelte:boundary>
20+
{#if route === 'a'}
21+
<p>a</p>
22+
{/if}
23+
24+
{#if route === 'b'}
25+
{#if ok}
26+
<p>b</p>
27+
{:else}
28+
{await goto('c')}
29+
{/if}
30+
{/if}
31+
32+
{#if route === 'c'}
33+
<p>c</p>
34+
{/if}
35+
36+
{#snippet pending()}
37+
<p>pending...</p>
38+
{/snippet}
39+
40+
{#snippet failed(error, reset)}
41+
<button onclick={reset}>retry</button>
42+
{/snippet}
43+
</svelte:boundary>

0 commit comments

Comments
 (0)