I want to start a independent thread in Node.js to do some heavy task, this is my code look like:
import logger from "../../common/log4js_config.js";
import { iterateAllKeys } from "../../common/migration/leveldb_to_postgresql.js";
import { Worker, isMainThread, parentPort } from "worker_threads";
export const initialize = () => {
if (isMainThread) {
const worker = new Worker(new URL(import.meta.url));
worker.on("message", (message) => {
logger.info("Message from worker:", message);
iterateAllKeys()
.then(() => {
console.log("Iteration completed.");
})
.catch((err: Error) => {
console.error("Error during iteration:", err);
});
});
worker.postMessage("Hello from main thread!");
}
};
this code shows error:
│ node:internal/event_target:1062 │
│ process.nextTick(() => { throw err; }); │
│ ^ │
│ ReferenceError [Error]: Cannot access 'initialize' before initialization │
│ at file:///home/node/app/dist/app.js:35:1 │
│ at ModuleJob.run (node:internal/modules/esm/module_job:195:25) │
│ at async ModuleLoader.import (node:internal/modules/esm/loader:337:24) │
│ at async loadESM (node:internal/process/esm_loader:34:7) │
│ at async handleMainPromise (node:internal/modules/run_main:106:12) │
│ Emitted 'error' event on Worker instance at: │
│ at [kOnErrorMessage] (node:internal/worker:314:10) │
│ at [kOnMessage] (node:internal/worker:325:37) │
│ at MessagePort. (node:internal/worker:225:57) │
│ at [nodejs.internal.kHybridDispatch] (node:internal/event_target:786:20) │
│ at exports.emitMessage (node:internal/per_context/messageport:23:28) │
│ │
│ Node.js v18.20.7
Am I missing something? what should I do to fixed this issue?