Spent too much time trying to fix main thread offload crash
This commit is contained in:
@@ -1,31 +1,44 @@
|
||||
import path from "path";
|
||||
import { Worker } from 'worker_threads';
|
||||
import {Logger} from "../logging/logger.js";
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
function launchWorker({templatePath, avatarURL, username}) {
|
||||
/**
|
||||
*
|
||||
* @param templatePath
|
||||
* @param avatarURL
|
||||
* @param username
|
||||
* @returns {Promise<unknown>}
|
||||
*/
|
||||
function launchWorker({ templatePath, avatarURL, username }) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const workerFile = path.resolve('./wwwroot/core/namecards/nameCardWorker.js');
|
||||
|
||||
const filename = fileURLToPath(import.meta.url);
|
||||
const dirname = path.dirname(filename);
|
||||
const workerFile = path.join(dirname, 'nameCardWorker.js');
|
||||
|
||||
const worker = new Worker(workerFile);
|
||||
|
||||
worker.postMessage({templatePath, avatarURL, username});
|
||||
worker.postMessage({ templatePath, avatarURL, username });
|
||||
|
||||
worker.on('message', (result) => {
|
||||
worker.once('message', async (result) => {
|
||||
console.log("worker terminated");
|
||||
resolve(result);
|
||||
worker.terminate()
|
||||
.catch(err => Logger.error("Unable to terminate worker", err.message));
|
||||
});
|
||||
|
||||
worker.on('error', (err) => {
|
||||
worker.once('error', async (err) => {
|
||||
reject(err);
|
||||
worker.terminate()
|
||||
.catch(err => Logger.error("Unable to terminate worker", err.message));
|
||||
});
|
||||
|
||||
worker.on('exit', (code) => {
|
||||
if (code !== 0) reject(new Error(`Worker stopped with code ${code}`));
|
||||
worker.once('exit', async (code) => {
|
||||
if (code === 0) {
|
||||
console.log('Worker exited cleanly.');
|
||||
} else {
|
||||
console.warn('Worker exited with error code:', code);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
export {launchWorker}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user