Skip to content
This repository was archived by the owner on May 29, 2023. It is now read-only.

Commit 7e9d7cd

Browse files
committed
chore: review review review
1 parent d971e86 commit 7e9d7cd

File tree

1 file changed

+24
-18
lines changed

1 file changed

+24
-18
lines changed

projects/workers/src/worker/classes/web-worker.ts

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import {fromEvent, Observable} from 'rxjs';
2-
import {take, takeWhile} from 'rxjs/operators';
1+
import {EMPTY, fromEvent, merge, Observable} from 'rxjs';
2+
import {take, tap} from 'rxjs/operators';
33
import {WORKER_BLANK_FN} from '../consts/worker-fn-template';
44
import {TypedMessageEvent} from '../types/typed-message-event';
55
import {WorkerFunction} from '../types/worker-function';
66

77
export class WebWorker<T = any, R = any> extends Observable<TypedMessageEvent<R>> {
8-
private worker: Worker;
9-
private url: string;
8+
private readonly worker: Worker | undefined;
9+
private readonly url: string;
1010

1111
constructor(url: string, options?: WorkerOptions) {
12-
let worker!: Worker;
12+
let worker: Worker | undefined;
1313
let error: any;
1414

1515
try {
@@ -23,17 +23,18 @@ export class WebWorker<T = any, R = any> extends Observable<TypedMessageEvent<R>
2323
subscriber.error(error);
2424
}
2525

26-
fromEvent<TypedMessageEvent<R>>(this.worker, 'message')
27-
.pipe(takeWhile(() => !subscriber.closed))
28-
.subscribe(event => {
29-
subscriber.next(event);
30-
});
31-
32-
fromEvent<ErrorEvent>(this.worker, 'error')
33-
.pipe(takeWhile(() => !subscriber.closed))
34-
.subscribe(event => {
35-
subscriber.error(event);
36-
});
26+
const eventStream$ = worker
27+
? merge(
28+
fromEvent<TypedMessageEvent<R>>(worker, 'message').pipe(
29+
tap(event => subscriber.next(event)),
30+
),
31+
fromEvent<ErrorEvent>(worker, 'error').pipe(
32+
tap(event => subscriber.error(event)),
33+
),
34+
)
35+
: EMPTY;
36+
37+
return eventStream$.subscribe();
3738
});
3839

3940
this.worker = worker;
@@ -68,11 +69,16 @@ export class WebWorker<T = any, R = any> extends Observable<TypedMessageEvent<R>
6869
}
6970

7071
terminate() {
71-
this.worker.terminate();
72+
if (this.worker) {
73+
this.worker.terminate();
74+
}
75+
7276
URL.revokeObjectURL(this.url);
7377
}
7478

7579
postMessage(value: T) {
76-
this.worker.postMessage(value);
80+
if (this.worker) {
81+
this.worker.postMessage(value);
82+
}
7783
}
7884
}

0 commit comments

Comments
 (0)