File tree Expand file tree Collapse file tree 3 files changed +81
-0
lines changed
packages/svelte/tests/runtime-runes/samples/async-derived-unchanging Expand file tree Collapse file tree 3 files changed +81
-0
lines changed Original file line number Diff line number Diff line change 1+ <script lang =" ts" >
2+ let queue: Array <{ deferred: PromiseWithResolvers <number >; value: number }> = [];
3+ let inited = false ;
4+
5+ function push(value : number ) {
6+ const deferred = Promise .withResolvers <number >();
7+ queue .push ({ deferred , value });
8+
9+ if (! inited ) {
10+ inited = true ;
11+ shift ();
12+ }
13+
14+ return deferred .promise ;
15+ }
16+
17+ function shift() {
18+ const next = queue .shift ();
19+ next ?.deferred .resolve (next .value );
20+ }
21+
22+ let n = $state (0 );
23+ let current = $derived (await push (n ));
24+ </script >
25+
26+ <button onclick ={shift }>shift</button >
27+ <button onclick ={() => n += 1 }>increment</button >
28+
29+ <p >{n }: {Math .min (current , 3 )}</p >
Original file line number Diff line number Diff line change 1+ import { flushSync } from 'svelte' ;
2+ import { test } from '../../test' ;
3+
4+ export default test ( {
5+ html : `<p>pending...</p>` ,
6+
7+ async test ( { assert, target } ) {
8+ await Promise . resolve ( ) ;
9+ await Promise . resolve ( ) ;
10+ await Promise . resolve ( ) ;
11+ await Promise . resolve ( ) ;
12+ await Promise . resolve ( ) ;
13+ await Promise . resolve ( ) ;
14+
15+ assert . htmlEqual (
16+ target . innerHTML ,
17+ `
18+ <button>shift</button>
19+ <button>increment</button>
20+ <p>0: 0</p>
21+ `
22+ ) ;
23+
24+ const [ shift , increment ] = target . querySelectorAll ( 'button' ) ;
25+ const [ p ] = target . querySelectorAll ( 'p' ) ;
26+
27+ for ( let i = 1 ; i < 5 ; i += 1 ) {
28+ flushSync ( ( ) => increment . click ( ) ) ;
29+ }
30+
31+ for ( let i = 1 ; i < 5 ; i += 1 ) {
32+ shift . click ( ) ;
33+ await Promise . resolve ( ) ;
34+ await Promise . resolve ( ) ;
35+ await Promise . resolve ( ) ;
36+ await Promise . resolve ( ) ;
37+
38+ assert . equal ( p . innerHTML , `${ i } : ${ i } ` ) ;
39+ }
40+ }
41+ } ) ;
Original file line number Diff line number Diff line change 1+ <script >
2+ import Component from ' ./Component.svelte' ;
3+ </script >
4+
5+ <svelte:boundary >
6+ <Component />
7+
8+ {#snippet pending ()}
9+ <p >pending...</p >
10+ {/ snippet }
11+ </svelte:boundary >
You can’t perform that action at this time.
0 commit comments