File tree Expand file tree Collapse file tree 2 files changed +150
-0
lines changed
packages/svelte/tests/runtime-runes/samples/async-each-overlap Expand file tree Collapse file tree 2 files changed +150
-0
lines changed Original file line number Diff line number Diff line change 1+ import { tick } from 'svelte' ;
2+ import { test } from '../../test' ;
3+
4+ export default test ( {
5+ skip : true ,
6+ async test ( { assert, target } ) {
7+ const [ add , shift ] = target . querySelectorAll ( 'button' ) ;
8+
9+ add . click ( ) ;
10+ await tick ( ) ;
11+ add . click ( ) ;
12+ await tick ( ) ;
13+ add . click ( ) ;
14+ await tick ( ) ;
15+
16+ // TODO pending count / number of pushes is off
17+
18+ assert . htmlEqual (
19+ target . innerHTML ,
20+ `
21+ <button>add</button>
22+ <button>shift</button>
23+ <p>pending=6 values.length=1 values=[1]</p>
24+ <div>not keyed:
25+ <div>1</div>
26+ </div>
27+ <div>keyed:
28+ <div>1</div>
29+ </div>
30+ `
31+ ) ;
32+
33+ shift . click ( ) ;
34+ await tick ( ) ;
35+ shift . click ( ) ;
36+ await tick ( ) ;
37+ assert . htmlEqual (
38+ target . innerHTML ,
39+ `
40+ <button>add</button>
41+ <button>shift</button>
42+ <p>pending=4 values.length=2 values=[1,2]</p>
43+ <div>not keyed:
44+ <div>1</div>
45+ <div>2</div>
46+ </div>
47+ <div>keyed:
48+ <div>1</div>
49+ <div>2</div>
50+ </div>
51+ `
52+ ) ;
53+
54+ shift . click ( ) ;
55+ await tick ( ) ;
56+ shift . click ( ) ;
57+ await tick ( ) ;
58+ assert . htmlEqual (
59+ target . innerHTML ,
60+ `
61+ <button>add</button>
62+ <button>shift</button>
63+ <p>pending=2 values.length=3 values=[1,2,3]</p>
64+ <div>not keyed:
65+ <div>1</div>
66+ <div>2</div>
67+ <div>3</div>
68+ </div>
69+ <div>keyed:
70+ <div>1</div>
71+ <div>2</div>
72+ <div>3</div>
73+ </div>
74+ `
75+ ) ;
76+
77+ shift . click ( ) ;
78+ await tick ( ) ;
79+ shift . click ( ) ;
80+ await tick ( ) ;
81+ assert . htmlEqual (
82+ target . innerHTML ,
83+ `
84+ <button>add</button>
85+ <button>shift</button>
86+ <p>pending=0 values.length=4 values=[1,2,3,4]</p>
87+ <div>not keyed:
88+ <div>1</div>
89+ <div>2</div>
90+ <div>3</div>
91+ <div>4</div>
92+ </div>
93+ <div>keyed:
94+ <div>1</div>
95+ <div>2</div>
96+ <div>3</div>
97+ <div>4</div>
98+ </div>
99+ `
100+ ) ;
101+ }
102+ } ) ;
Original file line number Diff line number Diff line change 1+ <script >
2+ let values = $state ([1 ]);
3+
4+ const queue = [];
5+
6+ function push (v ) {
7+ if (v === 1 ) return v;
8+
9+ const p = Promise .withResolvers ();
10+ queue .push (() => p .resolve (v));
11+ return p .promise ;
12+ }
13+
14+ function shift () {
15+ const fn = queue .shift ();
16+ if (fn) fn ();
17+ }
18+
19+ function addValue () {
20+ values .push (values .length + 1 );
21+ }
22+ </script >
23+
24+ <button onclick ={addValue }>add</button >
25+ <button onclick ={shift }>shift</button >
26+
27+ <p >
28+ pending={$effect .pending ()}
29+ values.length={values .length }
30+ values=[{values }]
31+ </p >
32+
33+ <div >
34+ not keyed:
35+ {#each values as v }
36+ <div >
37+ {await push (v )}
38+ </div >
39+ {/each }
40+ </div >
41+ <div >
42+ keyed:
43+ {#each values as v (v )}
44+ <div >
45+ {await push (v )}
46+ </div >
47+ {/each }
48+ </div >
You can’t perform that action at this time.
0 commit comments