MCPcopy Index your code
hub / github.com/andywer/threads.js / createEventObservable

Function createEventObservable

src/master/spawn.ts:77–107  ·  view source on GitHub ↗
(worker: WorkerType, workerTermination: Promise<any>)

Source from the content-addressed store, hash-verified

75}
76
77function 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
109function createTerminator(worker: WorkerType): { termination: Promise<void>, terminate: () => Promise<void> } {
110 const [termination, resolver] = createPromiseWithResolver<void>()

Callers 1

spawnFunction · 0.85

Calls 5

thenMethod · 0.80
addEventListenerMethod · 0.65
removeEventListenerMethod · 0.65
nextMethod · 0.45
completeMethod · 0.45

Tested by

no test coverage detected