🔧 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,37 +399,33 @@ 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 .then(module => {
import('../workers/search.worker.js?worker') searchWorker = new module.default();
.then(module => { console.log('✅ Worker created successfully');
searchWorker = new module.default();
console.log('✅ Worker created successfully');
searchWorker.onmessage = handleSearchWorkerMessage; searchWorker.onmessage = handleSearchWorkerMessage;
searchWorker.onerror = error => { searchWorker.onerror = error => {
console.error('❌ Worker error:', error.message); console.error('❌ Worker error:', error.message);
operationProgress.value.active = false;
operationProgress.value.message = 'Search error: ' + error.message;
};
console.log('✅ Worker event handlers attached');
})
.catch(error => {
console.error('❌ Failed to import worker:', error);
operationProgress.value.active = false; operationProgress.value.active = false;
operationProgress.value.message = 'Failed to initialize search'; operationProgress.value.message = 'Search error: ' + error.message;
searchWorker = null; };
});
} catch (error) { console.log('✅ Worker event handlers attached');
console.error('❌ Failed to create worker:', error); return searchWorker;
operationProgress.value.active = false; })
operationProgress.value.message = 'Failed to initialize search'; .catch(error => {
searchWorker = null; console.error('❌ Failed to import worker:', error);
} searchWorker = null;
searchWorkerInitPromise = null; // Reset so we can retry
throw error;
});
} }
return searchWorkerInitPromise;
}; };
const handleSearchWorkerMessage = event => { const handleSearchWorkerMessage = event => {