File tree Expand file tree Collapse file tree 1 file changed +45
-0
lines changed Expand file tree Collapse file tree 1 file changed +45
-0
lines changed Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+
3
+ class TargetIterator {
4
+ #target = null ;
5
+
6
+ constructor ( target ) {
7
+ this . #target = target ;
8
+ }
9
+
10
+ [ Symbol . asyncIterator ] ( ) {
11
+ const next = ( ) => new Promise ( ( resolve ) => {
12
+ const listener = ( event ) => {
13
+ this . #target. removeEventListener ( 'step' , listener ) ;
14
+ resolve ( {
15
+ value : event . detail ,
16
+ done : false ,
17
+ } ) ;
18
+ } ;
19
+ this . #target. addEventListener ( 'step' , listener ) ;
20
+ } ) ;
21
+ const iterator = { next } ;
22
+ return iterator ;
23
+ }
24
+ }
25
+
26
+ // Usage
27
+
28
+ const main = async ( ) => {
29
+ const target = new EventTarget ( ) ;
30
+ const iterator = new TargetIterator ( target ) ;
31
+
32
+ let counter = 0 ;
33
+ setInterval ( ( ) => {
34
+ counter ++ ;
35
+ const data = { detail : { counter } } ;
36
+ const event = new CustomEvent ( 'step' , data ) ;
37
+ target . dispatchEvent ( event ) ;
38
+ } , 1000 ) ;
39
+
40
+ for await ( const step of iterator ) {
41
+ console . log ( step ) ;
42
+ }
43
+ } ;
44
+
45
+ main ( ) ;
You can’t perform that action at this time.
0 commit comments