(worker: WorkerType, workerTermination: Promise<any>)
| 75 | } |
| 76 | |
| 77 | function createEventObservable(worker: WorkerType, workerTermination: Promise<any>): Observable<WorkerEvent> { |
| 78 | return new Observable<WorkerEvent>(observer => { |
| 79 | const messageHandler = ((messageEvent: MessageEvent) => { |
| 80 | const workerEvent: WorkerMessageEvent<any> = { |
| 81 | type: WorkerEventType.message, |
| 82 | data: messageEvent.data |
| 83 | } |
| 84 | observer.next(workerEvent) |
| 85 | }) as EventListener |
| 86 | const rejectionHandler = ((errorEvent: PromiseRejectionEvent) => { |
| 87 | debugThreadUtils("Unhandled promise rejection event in thread:", errorEvent) |
| 88 | const workerEvent: WorkerInternalErrorEvent = { |
| 89 | type: WorkerEventType.internalError, |
| 90 | error: Error(errorEvent.reason) |
| 91 | } |
| 92 | observer.next(workerEvent) |
| 93 | }) as EventListener |
| 94 | worker.addEventListener("message", messageHandler) |
| 95 | worker.addEventListener("unhandledrejection", rejectionHandler) |
| 96 | |
| 97 | workerTermination.then(() => { |
| 98 | const terminationEvent: WorkerTerminationEvent = { |
| 99 | type: WorkerEventType.termination |
| 100 | } |
| 101 | worker.removeEventListener("message", messageHandler) |
| 102 | worker.removeEventListener("unhandledrejection", rejectionHandler) |
| 103 | observer.next(terminationEvent) |
| 104 | observer.complete() |
| 105 | }) |
| 106 | }) |
| 107 | } |
| 108 | |
| 109 | function createTerminator(worker: WorkerType): { termination: Promise<void>, terminate: () => Promise<void> } { |
| 110 | const [termination, resolver] = createPromiseWithResolver<void>() |
no test coverage detected