private _initWorkers()

in packages/utils/worker-manager/src/WorkerManager.ts [66:121]


	private _initWorkers(workers: Worker[]) {
		workers.forEach((worker) => {
			worker.onmessage = (e) => {
				const id = e.data[WORKER_ID_KEY]
				if (id === undefined) {
					console.error(
						`Polaris::WorkerManager - '${WORKER_ID_KEY}' property lost in the returned message: `,
						e.data,
						e
					)
					return
				}
				const callbacks = this._callbackMap.get(id)
				if (!callbacks) {
					console.error(
						`Polaris::WorkerManager - id: ${id} callbacks lost, this may be caused by disposing or other unexpected usage. `
					)
					return
				}
				if (e.data.error) {
					callbacks.reject(e.data)
					this._callbackMap.delete(id)
					return
				}
				callbacks.resolve(e.data)
				this._callbackMap.delete(id)
			}
			worker.onmessageerror = (e) => {
				const id = e.data[WORKER_ID_KEY]
				if (!id) {
					console.error(
						`Polaris::WorkerManager -  '${WORKER_ID_KEY}' property lost in the returned message: `,
						e.data,
						e
					)
					return
				}
				const callbacks = this._callbackMap.get(id)
				if (!callbacks) {
					console.error(
						`Polaris::WorkerManager - id: ${id} callbacks lost, this may be caused by disposing or other unexpected usage. `
					)
					return
				}
				callbacks.reject(e.data)
				this._callbackMap.delete(id)
			}
			worker.onerror = (e) => {
				console.error(`Polaris::WorkerManager - Worker error: `, e.message, e)
			}
			this._workers.push({
				worker,
				activeTasks: 0,
			})
		})
	}