@@ -8,11 +8,13 @@ const REQUEST_TIMEOUT_MS = 10_000;
88function request ( worker , requestValue ) {
99 return new Promise ( ( resolve , reject ) => {
1010 const startedAt = performance . now ( ) ;
11- const timeout = setTimeout ( ( ) => {
12- reject ( new Error ( `Worker request ${ requestValue . id } timed out` ) ) ;
13- } , REQUEST_TIMEOUT_MS ) ;
14- const onError = ( event ) => {
11+ const cleanup = ( ) => {
1512 clearTimeout ( timeout ) ;
13+ worker . removeEventListener ( "error" , onError ) ;
14+ worker . removeEventListener ( "message" , onMessage ) ;
15+ } ;
16+ const onError = ( event ) => {
17+ cleanup ( ) ;
1618 reject (
1719 new Error (
1820 event . message ||
@@ -24,14 +26,16 @@ function request(worker, requestValue) {
2426 if ( event . data ?. id !== requestValue . id ) {
2527 return ;
2628 }
27- clearTimeout ( timeout ) ;
28- worker . removeEventListener ( "error" , onError ) ;
29- worker . removeEventListener ( "message" , onMessage ) ;
29+ cleanup ( ) ;
3030 resolve ( {
3131 response : event . data ,
3232 roundTripMs : performance . now ( ) - startedAt ,
3333 } ) ;
3434 } ;
35+ const timeout = setTimeout ( ( ) => {
36+ cleanup ( ) ;
37+ reject ( new Error ( `Worker request ${ requestValue . id } timed out` ) ) ;
38+ } , REQUEST_TIMEOUT_MS ) ;
3539 worker . addEventListener ( "error" , onError , { once : true } ) ;
3640 worker . addEventListener ( "message" , onMessage ) ;
3741 worker . postMessage ( requestValue ) ;
@@ -40,11 +44,13 @@ function request(worker, requestValue) {
4044
4145function waitForReady ( worker ) {
4246 return new Promise ( ( resolve , reject ) => {
43- const timeout = setTimeout ( ( ) => {
44- reject ( new Error ( "Parser worker ready handshake timed out" ) ) ;
45- } , REQUEST_TIMEOUT_MS ) ;
46- const onError = ( event ) => {
47+ const cleanup = ( ) => {
4748 clearTimeout ( timeout ) ;
49+ worker . removeEventListener ( "error" , onError ) ;
50+ worker . removeEventListener ( "message" , onMessage ) ;
51+ } ;
52+ const onError = ( event ) => {
53+ cleanup ( ) ;
4854 reject (
4955 new Error ( event . message || "Parser worker startup failed" ) ,
5056 ) ;
@@ -53,11 +59,13 @@ function waitForReady(worker) {
5359 if ( event . data ?. kind !== "ready" ) {
5460 return ;
5561 }
56- clearTimeout ( timeout ) ;
57- worker . removeEventListener ( "error" , onError ) ;
58- worker . removeEventListener ( "message" , onMessage ) ;
62+ cleanup ( ) ;
5963 resolve ( event . data ) ;
6064 } ;
65+ const timeout = setTimeout ( ( ) => {
66+ cleanup ( ) ;
67+ reject ( new Error ( "Parser worker ready handshake timed out" ) ) ;
68+ } , REQUEST_TIMEOUT_MS ) ;
6169 worker . addEventListener ( "error" , onError , { once : true } ) ;
6270 worker . addEventListener ( "message" , onMessage ) ;
6371 } ) ;
0 commit comments