diff --git a/Build/index.ts b/Build/index.ts index 4c17fc2e..dd61fe2e 100644 --- a/Build/index.ts +++ b/Build/index.ts @@ -53,13 +53,13 @@ import { TaskResult } from './lib/trace-runner'; const buildInternalReverseChnCIDRPromise = new Promise(resolve => { const handleMessage = (e: MessageEvent) => { - buildInternalReverseChnCIDRWorker.unref(); const { data } = e; buildInternalReverseChnCIDRWorker.postMessage('exit'); + buildInternalReverseChnCIDRWorker.removeEventListener('message', handleMessage); resolve(data); }; - buildInternalReverseChnCIDRWorker.addEventListener('message', handleMessage, { once: true }); + buildInternalReverseChnCIDRWorker.addEventListener('message', handleMessage); buildInternalReverseChnCIDRWorker.postMessage('build'); }); diff --git a/Build/workers/build-internal-reverse-chn-cidr-worker.ts b/Build/workers/build-internal-reverse-chn-cidr-worker.ts index f87dac42..4a04f3cc 100644 --- a/Build/workers/build-internal-reverse-chn-cidr-worker.ts +++ b/Build/workers/build-internal-reverse-chn-cidr-worker.ts @@ -1,11 +1,18 @@ declare const self: Worker; -self.addEventListener('message', async (e: MessageEvent<'build' | 'exit'>) => { +import { buildInternalReverseChnCIDR } from '../build-internal-reverse-chn-cidr'; + +// preload the task +const promise = buildInternalReverseChnCIDR(); + +const handleMessage = async (e: MessageEvent<'build' | 'exit'>) => { if (e.data === 'build') { - const { buildInternalReverseChnCIDR } = await import('../build-internal-reverse-chn-cidr'); - const stat = await buildInternalReverseChnCIDR(); + const stat = await promise; postMessage(stat); } else if (e.data === 'exit') { - process.exit(0); + self.removeEventListener('message', handleMessage); + self.unref(); } -}, { once: true }); +}; + +self.addEventListener('message', handleMessage);