🔧 Refactor search worker initialization to use a promise for improved error handling and retry capability

This commit is contained in:
2026-01-28 21:08:10 +00:00
parent a2ec573d39
commit fad082195b

View File

@@ -399,11 +399,11 @@ const client = new GamemasterClient();
// Web Worker for search operations // Web Worker for search operations
let searchWorker = null; let searchWorker = null;
let searchWorkerRequestId = 0; let searchWorkerRequestId = 0;
let searchWorkerInitPromise = null;
const initSearchWorker = () => { const initSearchWorker = () => {
if (!searchWorker) { if (!searchWorkerInitPromise) {
try { searchWorkerInitPromise = import('../workers/search.worker.js?worker')
// Use Vite's ?worker syntax for proper bundling
import('../workers/search.worker.js?worker')
.then(module => { .then(module => {
searchWorker = new module.default(); searchWorker = new module.default();
console.log('✅ Worker created successfully'); console.log('✅ Worker created successfully');
@@ -416,20 +416,16 @@ const initSearchWorker = () => {
}; };
console.log('✅ Worker event handlers attached'); console.log('✅ Worker event handlers attached');
return searchWorker;
}) })
.catch(error => { .catch(error => {
console.error('❌ Failed to import worker:', error); console.error('❌ Failed to import worker:', error);
operationProgress.value.active = false;
operationProgress.value.message = 'Failed to initialize search';
searchWorker = null; searchWorker = null;
searchWorkerInitPromise = null; // Reset so we can retry
throw error;
}); });
} catch (error) {
console.error('❌ Failed to create worker:', error);
operationProgress.value.active = false;
operationProgress.value.message = 'Failed to initialize search';
searchWorker = null;
}
} }
return searchWorkerInitPromise;
}; };
const handleSearchWorkerMessage = event => { const handleSearchWorkerMessage = event => {