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