File tree Expand file tree Collapse file tree 2 files changed +18
-5
lines changed
packages/client/src/timers Expand file tree Collapse file tree 2 files changed +18
-5
lines changed Original file line number Diff line number Diff line change @@ -73,7 +73,17 @@ class TimerWorker {
7373 }
7474
7575 const id = this . getTimerId ( ) ;
76- this . callbacks . set ( id , callback ) ;
76+
77+ this . callbacks . set ( id , ( ) => {
78+ callback ( ) ;
79+
80+ // Timeouts are one-off operations, so no need to keep callback reference
81+ // after timer has fired
82+ if ( type === 'setTimeout' ) {
83+ this . callbacks . delete ( id ) ;
84+ }
85+ } ) ;
86+
7787 this . sendMessage ( { type, id, timeout } ) ;
7888 return id ;
7989 }
Original file line number Diff line number Diff line change @@ -12,10 +12,13 @@ self.addEventListener('message', (event: MessageEvent) => {
1212 case 'setInterval' :
1313 timerIdMapping . set (
1414 request . id ,
15- ( request . type === 'setTimeout' ? setTimeout : setInterval ) (
16- ( ) => tick ( request . id ) ,
17- request . timeout ,
18- ) ,
15+ ( request . type === 'setTimeout' ? setTimeout : setInterval ) ( ( ) => {
16+ tick ( request . id ) ;
17+
18+ if ( request . type === 'setTimeout' ) {
19+ timerIdMapping . delete ( request . id ) ;
20+ }
21+ } , request . timeout ) ,
1922 ) ;
2023 break ;
2124
You can’t perform that action at this time.
0 commit comments