1
+ import type { ReplayRecordingData } from '@sentry/types' ;
1
2
import { logger } from '@sentry/utils' ;
2
3
3
4
import type { AddEventResult , EventBuffer , RecordingEvent , WorkerRequest , WorkerResponse } from '../types' ;
4
- import { ReplayRecordingData } from '@sentry/types' ;
5
5
6
6
/**
7
7
* Event buffer that uses a web worker to compress events.
@@ -18,6 +18,7 @@ export class EventBufferCompressionWorker implements EventBuffer {
18
18
private _worker : Worker ;
19
19
private _eventBufferItemLength : number = 0 ;
20
20
private _id : number = 0 ;
21
+ private _ensureReadyPromise ?: Promise < void > ;
21
22
22
23
public constructor ( worker : Worker ) {
23
24
this . _worker = worker ;
@@ -44,7 +45,12 @@ export class EventBufferCompressionWorker implements EventBuffer {
44
45
* This will either resolve when the worker is ready, or reject if an error occured.
45
46
*/
46
47
public ensureReady ( ) : Promise < void > {
47
- return new Promise ( ( resolve , reject ) => {
48
+ // Ensure we only check once
49
+ if ( this . _ensureReadyPromise ) {
50
+ return this . _ensureReadyPromise ;
51
+ }
52
+
53
+ this . _ensureReadyPromise = new Promise ( ( resolve , reject ) => {
48
54
this . _worker . addEventListener (
49
55
'message' ,
50
56
( { data } : MessageEvent ) => {
@@ -65,6 +71,8 @@ export class EventBufferCompressionWorker implements EventBuffer {
65
71
{ once : true } ,
66
72
) ;
67
73
} ) ;
74
+
75
+ return this . _ensureReadyPromise ;
68
76
}
69
77
70
78
/**
0 commit comments